Web3js

直接針對合約地址執行交易批准(無 ABI)

  • January 27, 2020

已解決 現在,您將始終需要 ABI 來使用 web3 對乙太坊網路執行呼叫。一種簡單的方法是重構您希望執行的函式,或者創建一個單獨的合約來呼叫或使用此處的技巧並添加 ABI 或至少從您希望呼叫的合約中添加一部分。以防萬一,我使用了批准呼叫的通用 ABI。

await this.state.currentAddress.methods.approve("0x8b4a5682189361ce56702260051900f74d76e08b", amount).send({from: this.state.accounts[0]});

我有以下反應。這是我認為我可以執行該approve功能的方式,但它不起作用。我當然可以從 API 獲得契約 ABI,但我想避免這種情況。有沒有什麼方法可以通過web3直接通過合約地址呼叫標準ERC20代幣的Approve功能,而無需導入ABI?

您將需要 ABI。是合約實例的.methods一個屬性,你可以通過 ABI 獲得。

如果您使用ethers.js,您可以使用簡寫 ABI 來實現相同的目標:

let abi = ["function approve(address _spender, uint256 _value) public returns (bool success)"]
let provider = ethers.getDefaultProvider('ropsten')
let contract = new ethers.Contract(tokenAddress, abi, provider)
await contract.approve(accountAddress, amount)

注意:如果要傳入 a from,則必須使用 ethers opt

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