智能合约
智能合约是在区块链上运行的程序。它们是位于区块链特定地址的一组代码(函数)和数据(状态)。
智能合约也被视为账户,我们称之为合约账户。它们有余额,可以成为交易的主体。它们被部署到网络上作为程序运行。个人用户可以通过提交交易来执行智能合约中的特定函数,从而与智能合约交互。
智能合约可以像传统合约一样定义规则,并通过代码自动执行它们。默认情况下,您无法删除智能合约,与它们的交互是不可逆的。
ABI
应用程序二进制接口(ABI)是调用以太坊合约的接口规范。不同的合约有自己的 ABI,您需要在调用合约之前获取合约的 ABI。
以太坊上的USDT 合约地址及其 ABI 如下:
[
{
"constant": true,
"inputs": [],
"name": "name",
"outputs": [{ "name": "", "type": "string" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "_totalSupply",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
...
{ "anonymous": false, "inputs": [], "name": "Unpause", "type": "event" }
]
合约初始化
您可以使用各种库与智能合约交互,例如 web3.js。
合约的初始化如下:
import Web3 from 'web3'
const web3 = new Web3(provider);
const abi = [{"constant":true,"inputs":[],...}];
const contractAddress = '0xdAC17F958D2ee523a2206206994597C13D831ec7';//usdt合约地址
const contract = new web3.eth.Contract(abi, contractAddress);
注意:provider 必须对应于所选钱包。
调用合约方法
数据读取方法.myMethod.call
contract.methods.myMethod(...args).call() //返回promise
await usdtContract.methods.name().call() // => Tether USD
await usdtContract.methods.totalSupply().call() // => 51998545629548753
await usdtContract.methods.balances('your address').call() // 您的余额
估算 Gas 费用
contract.methods.myMethod(...args).estimateGas({
from: 'your address',
})
数据写入
contract.methods.myMethod(...args).send({
from: 'your address',
})
其他合约方法以此类推。
相关阅读
Last updated on