transferFrom 功能不起作用
我做了一個簡單的 ERC20 代幣智能合約,但是我的
transferFrom
功能不起作用。我不斷收到“注意:如果您發送值,則應支付建構子。” 即使我宣布它為應付。function transferFrom(address from, address to, uint256 value) payable public returns(bool success) { require( allowed[from][msg.sender] >= value && balances[from] >= value && value >= 0 ); balances[from] -= value; balances[to] += value; allowed[from][msg.sender] -= value; Transfer(from, to, value); return true; }
我猜你是新手。可能有兩個問題可能是呼叫函式和要求。首先讓我解釋一下
payable
功能。當您將函式聲明為應付時,這意味著交易會將乙太幣發送到該函式。如何呼叫應付函式,
contractObj.sampleFunction.sendTransaction(ar1, arg2,{from: <FROM>, value:<Eth_in_wei>});
如果您不使用 eth 事務呼叫函式,則會引發錯誤。注意:如果您發送值,則應支付建構子
來到你的qus:
transferFrom() 函式將檢查使用者 A 是否已授予 B 地址自動借記 X 個令牌的權限?如果是,那麼它將從 A 中扣除代幣並記入 B 地址
第一個使用者 A 必須使用 B 地址和令牌數量呼叫approve() 函式。在批准方法中,您直接將 X 個令牌分配給 B。
所以你必須呼叫approve(),然後一段時間後,第三方合約將呼叫帶有地址A、地址B和Y令牌的transferFrom()方法。
當您想將儲存變數保存在solidity中時,您需要
sendTransaction()
使用 {from: , gas: } 呼叫,如果函式是payable
那麼值鍵將成為一部分。請參閱以下連結以獲取參考:
https://theethereum.wiki/w/index.php/ERC20_Token_Standard
https://medium.com/@jgm.orinoco/understanding-erc-20-token-contracts-a809a7310aa5
如果您使用轉帳,則您的功能是發起一種付款方式。Payable 是指定在向合約獲取乙太幣時,哪個函式只響應乙太幣的支付。
您需要從函式中刪除轉接呼叫。
> > 轉移(從,到,價值); > > >
那它會起作用的。如果您願意,然後發出不同的應付函式。