主页 > imtoken钱包下载安卓 > 以太坊 JavaScript API web3.js 令牌
以太坊 JavaScript API web3.js 令牌
ABI 简介
什么是ABI(Application Binary Interface)请参考官网文档。 简单来说,ABI 就是外界与合约交互的方式:
做过RPC的同学可以理解,这是异构平台的RPC实现,需要接口定义、存根生成、寻址、序列化、网络通信等步骤调用合约上的函数。
有关示例,请参见 ABI。
web3.js简介
web3.js 是以太坊 JavaScript API 的官方实现以太坊web开发,用于基于 HTTP 或 IPC 连接以编程方式与以太坊节点通信。 简单来说,web3.js可以通过JavaScript调用本地或远程的以太坊节点,完成网络管理、账户管理、交易等操作。
以下代码示例基于web3.js v1.0开发,请注意不同版本之间的差异。
同步块
人们都说发行以太坊币最大的技术难点是同步区块,千真万确!
我尝试了ETHFANS Spark Project提供的静态节点,但是没有用。 最后还是放弃了本地电脑同步。 主要问题是我家这边的网络质量太差了,经常掉线。
后来在阿里云的海外节点开了个服务器,几个小时就同步了(国内节点也试过,不过一夜没同步好,心急就放弃了)。 服务器配置如下,供大家参考:
同步使用官方geth即可,无参启动。 每次下载最新的geth最好都浏览一下帮助,以免掉入参数过时的坑。
交易(代币/转账)
铺垫完毕以太坊web开发,我们就正式进入今天的话题:如何通过web3.js来发币。 我们一般需要用到以下几个API(看名字就可以理解的API就不说了):
首先启动geth的交互执行环境:geth attach(Windows下可能需要geth attach ipc:\\.\pipe\geth.ipc),然后将其分成两种代币:以太坊和ERC20代币。
以太坊转账
这种情况最简单,只需要两步:
解锁源账户以执行转账
1personal.unlockAccount(fromAddr); // 输入正确的私钥密码后将允许进行交易操作
2eth.sendTransaction({from: fromAddr, to: toAddr, value: web3.toWei(0.1, "ether")}); // 转账 0.1 eth
ERC20代币转账构造ERC20代币合约操作对象解锁源账户调用ERC20代币转账接口执行转账
1var tokenContractABI = [....] // JSON ABI
2var contractAddr = "0xe249e7a6f5a9efee03b4c5090c77245ef6fe0f5e";
3var tokenContract = eth.contract(tokenContractABI).at(contractAddr); // 构造合约对象
4
5var fromAddr = "0xb3d201b5963db83c434e5810b54ac62e3ee05c00"; // 源账户地址
6tokenContract.balanceOf(fromAddr); // 查看令牌余额
7var amount = 20000; // 转账金额
8var toAddr = "0x.."; // 目标账户地址
9
10personal.unlockAccount(fromAddr); // 输入正确的私钥密码后将允许进行交易操作
11tokenContract.transfer(toAddr, web3.toWei(amount), {from: fromAddr}); // 执行令牌转账
事件处理
主要使用场景是发送交易后等待网络确认,然后通知外部程序做相应的处理; 它还用于与合同定义的事件进行交互。
使用回调
1eth.sendTransaction({
2 from: '0x..',
3 to: '0x..',
4 value: '10000'
5}, function(error, hash){
6 ...
7});
使用承诺
1eth.sendTransaction({
2 from: '0x..',
3 to: '0x..',
4 value: '10000'
5}).then(function(receipt){
6 ...
7});
使用监视器
1eth.sendTransaction({
2 from: '0x..',
3 to: '0x..',
4 value: '10000'
5}).on('transactionHash', function(hash) {
6 ...
7}).on('receipt', function(receipt) {
8 ...
9}).on('confirmation', function(confirmationNumber, receipt) {
10 ...
11}).on('error', console.error);
总结
web3.js 由以太坊的JavaScript API 实现,作为交互式可执行环境集成在以太坊节点geth 中,也可以引入JavaScript 应用程序中单独使用。 它提供了一种通过 JS 与以太坊网络和智能合约进行交互的方式,开箱即用。 对于新手来说,学习以太坊开发最大的难点就是区块同步。 当然,您也可以使用测试网络或自建私有网络进行开发调试。
更多关于以太坊和区块链开发的干货,请访问哈哈哈哈派社区以太坊和区块链。