將自定義 ERC20 代幣從一個地址發送到另一個地址
如果我想發送 EBTC/ECASH 自定義 ERC20 代幣,如何將自定義 ERC20 代幣從一個錢包發送到另一個錢包。
我寫了一種方法,可以將乙太幣從一個賬戶發送到另一個賬戶,我怎麼能對非乙太幣交易做同樣的事情?
public static void sendCustomToken(String privateKey,String toAccount, double amount) throws Exception{ Web3j web3 = Web3j.build(new HttpService("http://localhost:8180/")); BigInteger key = new BigInteger(privateKey,16); ECKeyPair ecKeyPair = ECKeyPair.create(key.toByteArray()); Credentials credentials = Credentials.create(ecKeyPair); TransactionReceipt transactionReceipt = Transfer.sendFundsAsync( web3, credentials, toAccount, BigDecimal.valueOf(amount), Convert.Unit.ETHER).get(); System.out.println("Transaction Hash:"+transactionReceipt.getTransactionHash()); }
自定義代幣:eBTC 合約地址:0x2fd41f516fac94ed08e156f489f56ca3a80b04d0 代幣小數位數:8
任何幫助或指示?
我假設您正在使用 Web3j 和部署的智能合約實現 ERC20 介面,其中傳輸方法如下所示:
function transfer(address _to, uint256 _value) public returns (bool success) { require(balances[msg.sender] >= _value && _value > 0); balances[msg.sender] -= _value; balances[_to] += _value; return true; }
您可以使用 web3j 包裝器為您的合約呼叫區塊鏈上的合約方法。假設您的 Contract 文件名是
MyContract.sol
,那麼您將需要solc編譯器和web3j工具,並在控制台中執行以下操作:
$ solc {contract}.sol --bin --abi --optimize -o {output-dir}/
這將生成
.abi
和.bin
文件,您可以從中生成 java 包裝類:
$ web3j solidity generate /path/to/<smart-contract>.bin /path/to/<smart-contract>.abi -o /path/to/src/main/java -p com.your.organisation.name
這將為您的合約生成一個 java 包裝類,
MyContract.java
您可以在其上呼叫智能合約上所有可用的方法:import static org.web3j.tx.Contract.GAS_LIMIT; import static org.web3j.tx.ManagedTransaction.GAS_PRICE; //web3j initialization code goes here //Load the deployed contract: MyContract contract = MyContract.load(contractAddress, web3j, credentials, GAS_PRICE, GAS_LIMIT); //Call methods on the contract: Future<> result = contract.transfer(_to, _value);
您可以在此處找到有關如何使用智能合約包裝器的更多資訊。希望有幫助。
編輯。
abi
對於這個特定的契約,bin
可以從etherscan.io獲得 即使您不是契約的所有者,您也可以轉移代幣。但是您只能將可用的代幣轉移到您自己的帳戶中,如合同中所示:function transfer(address _to, uint256 _amount) returns (bool success) { if (balances[msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to]) { balances[msg.sender] -= _amount; balances[_to] += _amount; Transfer(msg.sender, _to, _amount); return true; } else { return false; } }