当前位置:   article > 正文

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

《深入掌握以太坊核心技术》--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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  1. 在shell中执行以下命令
    对js文件node,然后得到结果为交易哈希,然后在挖矿后,就可看到链上数值的变化
$ node transfer_script.js
Result: 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4
  • 1
  • 2

转币合约脚本

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);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  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); // 如果事件触发,打印事件信息
});

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/607508
推荐阅读
  

闽ICP备14008679号