Web3js
如何使用數組或字典向 Solidity 函式發送多個參數?
提前對不起我的英語我是法國人:)
我嘗試創建一個簡單的乙太坊錢包。這個想法是允許使用者創建契約並與之互動。我正在使用meteor、web3 和一個testRPC 節點。
基本上對於與契約的互動,對於我在瀏覽器上列印其功能列表的每個契約。使用者只需點擊他想要的函式,然後列印一個彈出視窗以檢索函式的參數。然後我使用 web3 將請求發送到 testRPC 節點並使用回調為使用者列印結果。
問題是基本上我事先並不明顯知道函式和arg是什麼。所以我用一個特殊的數字索引我的每個 html 文件,並結合數據庫,我檢索契約的地址,以及關於函式的所有資訊(使用 ABI)。然後我創建三個變數:
- 一個變數
contract
- 一個變數
functionPrototype = abi of my function
args = {nameArg1 : arg1, nameArg2 : arg2 etc...}
一本包含我的論點的字典。然後我有契約,函式的名稱和參數。
如果原始的 Solidity 函式是:
function whatever(type nameArg1, type nameArg2) public{}
我想使用以下 web3 函式發送我的請求:
contract[functionPrototype.name](args, {from: account, gas: 350000}, function(err, result){})
但是這個請求不起作用。當我編寫所有參數時,以下請求有效:
contract[functionPrototype.name](arg1, arg2, {from: account, gas: 350000}, function(err, result){})
所以人們可以說:你為什麼不使用第二個請求?
因為有無數個函式,我無法為每個函式編寫所有參數。我需要自動化所有過程,所以基本上檢索 arg 和函式的名稱,並使用字典或數組作為輸入。
我嘗試使用帶有數組
apply
的函式,但它也不起作用。我一直都有一個WebSocket is closed due to suspension.
那麼你知道我如何使用字典或數組將我的參數發送到solidity函式嗎?
非常感謝!!!
祝你工作順利
你的
apply
函式程式碼是什麼?它應該是contract[funcName].apply(contract, paramsArray)
如果您的框架支持 ES2015,您可以在函式呼叫中使用 spread
contract[funcName](...paramsArray)