Web3js
fromAccount 和 web3.js
這是我在solidity中的功能
function transferForm(address _from, address _to, uint256 _value) public returns (bool success) { }
現在我在測試文件中呼叫相同的函式來測試我的智能合約
tokenInstance.transferForm(spendingAccount,10,{from : fromAccount})
我已經從賬戶初始化到賬戶$$ 3 $$
為什麼我們通過使用發送數據
{from : fromAccount}
為什麼我們不能發送諸如
tokenInstance.transferForm(from,spendingAccount,10,)
有什麼區別嗎?
函式如何知道我們何時改變我們發送的函式輸入參數的位置
請幫助我理解邏輯
即使認為他們有同樣令人困惑的名字,他們指的是不同的東西。
格式
{ key: value }
為 web3 格式,用於為函式提供額外的元數據。這些不作為函式的參數傳遞,而是在內部處理。例如,密鑰from
可用於定義從哪個可用帳戶發送交易。該值不會直接傳遞給函式,但交易是從該帳戶創建的。該
transferFrom
函式需要一個類型的第一個參數,address
並且必須提供它。函式簽名不知道實際交易來自哪個帳戶 - 稍後可以在函式中使用msg.sender
. 所以如果你為{ from: fromAccount }
函式呼叫提供了一個,fromAccount
就會變成msg.sender
函式內部。編輯
此外,該函式
transferFrom
需要 3 個參數,但在第一個範例中您只傳遞了兩個參數。該函式無法以任何方式從元數據中“重新映射”參數,因此您會收到錯誤,因為您的簽名(2 個參數)的函式不存在。