主页 > imtoken钱包下载安卓 > 以太坊 JavaScript API web3.js 令牌

以太坊 JavaScript API web3.js 令牌

imtoken钱包下载安卓 2023-04-14 05:53:43

Ethereum

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 与以太坊网络和智能合约进行交互的方式,开箱即用。 对于新手来说,学习以太坊开发最大的难点就是区块同步。 当然,您也可以使用测试网络或自建私有网络进行开发调试。

更多关于以太坊和区块链开发的干货,请访问哈哈哈哈派社区以太坊和区块链。