Contract-Development

transferFrom 功能不起作用

  • January 9, 2022

我做了一個簡單的 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那麼值鍵將成為一部分。

請參閱以下連結以獲取參考:

payable() 函式

https://theethereum.wiki/w/index.php/ERC20_Token_Standard

https://medium.com/@jgm.orinoco/understanding-erc-20-token-contracts-a809a7310aa5

如果您使用轉帳,則您的功能是發起一種付款方式。Payable 是指定在向合約獲取乙太幣時,哪個函式只響應乙太幣的支付。

您需要從函式中刪除轉接呼叫。

> > 轉移(從,到,價值); > > >

那它會起作用的。如果您願意,然後發出不同的應付函式。

引用自:https://ethereum.stackexchange.com/questions/40089