Solidity
如何在 JavaScript 中訪問從solidity 函式返回的多個返回值
我的合約函式返回兩個值。如何從 mocha 測試案例訪問 JavaScript 中的多個返回值?
contract X { function a() pure public returns(uint,uint) { uint p=10; uint q=20; uint add = p+q; uint sub = q-p; return(add,sub); } }
我不確定 ivicaa 在上一個答案中使用的web3 版本。在 web3 “v1.0.0-beta.37” 上,多個值實際上是在一個對像中返回的,而不是一個數組。但是,由於返回的對象具有以 numbers 命名的屬性
{0: 'value1', 1:'value2'}
,因此原始答案是完全有效的,因此仍然可以使用 syntax 訪問返回的值result[0]
。如果您使用的是 ES6,則可以使用帶命名變數的解構賦值來獲得單行。
例子:
Solidity 函式
// This function will return 03 values function getData() external view returns (string, bool, uint256) { return ("data", true, 15); }
JS測試
const result = await deployedContract.getData({from: accountAddress}); const {0: strValue, 1: boolValue, 2: intValue} = result; console.log(strValue); // "data" console.log(boolValue); // true console.log(intValue); // 15
我建議你學習如何使用松露。它有助於編譯、測試、部署智能合約。它也是基於摩卡咖啡。有關使用 JavaScript 在 truffle 中編寫單元測試的範例,您可以查看https://truffleframework.com/docs/truffle/testing/writing-tests-in-javascript
此外,在簡單的情況下,您也可以在 Solidity 中編寫單元測試。請參閱https://truffleframework.com/docs/truffle/testing/writing-tests-in-solidity
編輯:回答您的評論:
在 Solidity 中,您可以像這樣讀取多個返回:
(uint add, uint sub) = x.a();
在通過 web3 的 truffle 中,它作為數組返回:
x.a().then(function(res){ var add = res[0]; var sub = res[1]; })