使用web3.js和infura开发以太坊智能合约

Infura 提供公开的 Ethereum 主网和测试网络节点。到 Infura 官网申请,只要输入一点基本资料和 Email,就可以收到 API-key。

如果你希望立刻开始学习以太坊DApp开发,推荐这个教程:以太坊DApp实战开发入门

查询合约状态

最常需要查询的状态就是 Token 的余额啦。我就用 EOS Token 合约做为范例试看看。

取得合约信息

可以透过 Etherscan,大部分知名的合约可以直接搜寻到:

etherscan

要呼叫合约,至少需要:

  • 合约地址,例如:0x86Fa049857E0209aa7D9e616F7eb3b3B78ECfdb0
  • 要呼叫的合约方法签名,例如以 ERC 20 Token 合约来说,查询余额要呼叫的 function 是 balanceOf(address) ,其对应的 function signature 是 70a08231 。

如何取得 function signature 呢? 以 balanceOf(address) 为例:

i. 把 balanceOf(address) 经过 sha3

0x70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be 
ii. 取除了 0x 外,前面的 8 位

70a08231 
以上流程可以用任何工具完成,以 web3.js 为例:

var functionSig = we3.sha3("balanceOf(address)").substr(2,8)

另外也可以把 contract code 贴到 Remix(编者注:可见文末链接)。在合约的 Details 中可以看到完整的合约接口和对应的 function signature。

function signature

使用 RPC

好的,关于web3.js调用智能合约,我可以给你一些基本的步骤和代码示例。 首先,你需要连接到以太坊网络,可以使用Web3.js提供的Provider对象,例如: ```javascript const Web3 = require('web3'); const provider = new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/your-project-id'); const web3 = new Web3(provider); ``` 在连接成功后,你需要获取智能合约的ABI和地址,例如: ```javascript const abi = [{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]; const contractAddress = '0x1234567890123456789012345678901234567890'; const contract = new web3.eth.Contract(abi, contractAddress); ``` 接着,你可以使用智能合约的方法,例如: ```javascript contract.methods.owner().call().then(console.log); ``` 这里调用了智能合约的owner方法,并输出结果到控制台。 如果你需要发送交易来执行智能合约的可写方法,可以使用send方法,例如: ```javascript const privateKey = '0x1234567890123456789012345678901234567890123456789012345678901234'; const account = web3.eth.accounts.privateKeyToAccount(privateKey); const value = web3.utils.toWei('1', 'ether'); const gasPrice = web3.utils.toWei('30', 'gwei'); const gasLimit = 200000; contract.methods.transferOwnership('0x9876543210987654321098765432109876543210') .send({ from: account.address, gasPrice: gasPrice, gas: gasLimit, value: value }) .then(console.log); ``` 这里使用私钥生成账户,发送一笔以太币交易,调用智能合约的transferOwnership方法并发送交易,交易的参数包括发送地址、燃气费用、燃气限制和转账金额等。 希望这些代码可以帮助你了解如何使用Web3.js调用智能合约
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值