《深入掌握以太坊核心技术》--13-Web3.js写以太坊脚本

《深入掌握以太坊核心技术》--13-Web3.js写以太坊脚本

转账脚本

node transfer_script.js
-> Result:0x000000

  1. 编写转账的js脚本,保存在 transfer_script.js文件中
//转币自动化 transfer_script.js
// 引入Web3.js库
var Web3 = require('web3');

// 创建一个Web3对象,连接到本地8545端口的以太坊节点
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

// 设置发送者账户地址
var _from = web3.eth.accounts[0];

// 设置接收者账户地址
var _to = "0x0000"; // 转币地址,需要替换为实际的接收者地址

// 设置转账金额,单位为wei
var _value = 50000;

// 发送以太币交易
web3.eth.sendTransaction({
    from: _from,
    to: _to,
    value: _value
}, (err, res) => {
    if (err)
        console.log("Error:", err); // 如果出错,打印错误信息
    else
        console.log("Result:", res); // 如果成功,打印交易结果
});


  1. 在shell中执行以下命令
    对js文件node,然后得到结果为交易哈希,然后在挖矿后,就可看到链上数值的变化
$ node transfer_script.js
Result: 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4

转币合约脚本

1.转币合约

pragma solidity ^0.4.26;
 
contract Coin{
    address public minter;
    mapping(address=>uint) public balance;
    event Sent(address from,address to,uint account);
    constructor() public{
        minter = msg.sender;        
    }
    
    function mint(address receiver,uint account) public{
        require(msg.sender == minter);
        balance[receiver] += account;
    }
    
    function send(address receiver,uint account) public{
        require(balance[msg.sender] >= account);
        balance[msg.sender] -= account;
        balance[receiver] += account;
        emit Sent(msg.sender,receiver,account);
    }
}

2.将合约转为AbI
这里可以用solc或者remix来执行

3.编写转账的js脚本,保存在sendCoin.js文件中

// 引入Web3.js库
var Web3 = require('web3');

// 创建一个Web3对象,连接到本地8545端口的以太坊节点
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

// 设置发送者账户地址
var _from = web3.eth.accounts[0];

// 设置接收者账户地址
var _to = web3.eth.accounts[1];

// 设置转账金额
var amount = 50; // 50个以太币

// 合约ABI(Application Binary Interface),用于与智能合约进行交互
var abi = [{"constant":true,"inputs":[],...."}]

// 创建一个合约对象
var CoinContract = web3.eth.contract(abi);

// 合约地址
var contractAddr = "0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db";

// 获取合约实例
var contractInstance = CoinContract.at(contractAddr);

// 调用合约的send方法发送以太币
/*
  *  _to: 接收者的以太坊地址。
  *  amount: 要发送的以太币数量。
  *  {from: _from}: 表示交易的发送者地址,即发起交易的账户地址。
  *  (err, res) => {...}: 是一个回调函数,用于处理交易的结果。如果交易成功,err 将为 null,而 res 将包含交易的相关信息;如果交易失败,err 将包含错误信息。

*/
contractInstance.send(_to, amount, {from: _from}, (err, res) => {
    if (err)
        console.log("Error:", err); // 如果出错,打印错误信息
    else
        console.log("Result", res); // 如果成功,打印交易结果
});

  1. 与上同理

监听脚本

//SentEvent_listener.js
// 引入web3库
var Web3 = require('web3'); 

// 创建一个web3实例,连接到本地8545端口的以太坊节点
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

// 合约ABI,包含合约函数和事件的描述
var abi = [{"constant":true,"inputs":[],...."}"]

// 合约地址
var contractAddr = "0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db";

// 使用合约ABI和地址创建一个合约实例
var CoinContract = web3.eth.contract(abi);
var contractInstance = CoinContract.at(contractAddr);

// 监听合约事件,这里监听的是名为"sent"的事件,参数是"latest"
contractInstance.sent("latest", (err, res) => {
    if (err)
        console.log("Error:", err); // 如果发生错误,打印错误信息
    else
        console.log("Sent Event occurs", res); // 如果事件触发,打印事件信息
});

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值