web3.js 交互 geth 实现转帐余额查询功能

区块链学习笔记-记录拉跨的学习之旅

目的:使用web3.js部署,调用智能合约 交互geth实现代币转帐和余额查询 (web.js 版本为1.4.2)web

 

1.开启私链 (--rpc 开启rpc链接方式 默认监听为本地127.0.0.1:8545 经过--rpcaddr 可设置为0.0.0.0 使其余客户端可以链接 这里使用--dev 开发者模式 减去帐户解锁以及挖矿过程)数组

 

 

2.编写智能合约代码(实现转帐 余额查询功能)app

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract chishi{    
    
    mapping(address=>uint) public balanceof;
    function getBalance(address addr) view public returns(uint){
        
        return addr.balance;
    }
    function sends(address to) public payable{
    
        payable(to).transfer(1 ether);
        
    }

    
    fallback() external payable {}
    
    receive() external payable {}
}

 

 

3.编译源码获取ABI以及BYTECODE (这里能够使用solc 进行编译 这里我直接用remix 编译)ide

 

 

 

4.利用web3.js 进行合约部署 (这里提出疑问 为何部署的合约的地址无法直接赋值给变量 难道只能先部署 记下地址 而后在操做吗? 感受有点拉跨)函数

 

新版的web3.js 已经不推荐使用httpProvieds 这种链接方式了 由于它不支持订阅 另外这里的from 在remix编译里 是web3.eth.accounts[0] 新版的web3.js 不是这种获取方式 而是  web3.eth.getAccounts() 可是这里返回的不是数组 我这不知道如何经过 数组取值 拉跨学习

 

 

5.编写js文件 将全部操做 写在其中 (最开始我是想实现外部帐户对外部帐户的转帐 可是发现soildity里没有相关的函数 只有一个transfer()方法 这个方法的帐户发送方已经指定为合约帐户 也就是说外部到外部 须要 先外部到合约再合约到外部 我不知道为何没有直接外部到外部 拉跨)区块链

 
 

var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:8545"))
var chishiContract = new web3.eth.Contract([{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceof","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"sends","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}],'0x3842529CfDc3Cb2b8e2d1E1B267ed62C2Acd00d9');
web3.eth.sendTransaction({from:'0xc6a950f25a9f5e2a72cd9d279e642d0e31035feb',to:'0x3842529CfDc3Cb2b8e2d1E1B267ed62C2Acd00d9',value:10000000000000000000})
to = '0xba160796014b367e0fd6bc0e3b188ec63a7ce19b'
console.log("初始余额:")
chishiContract.methods.getBalance(to).call(console.log)
chishiContract.methods.sends(to).send({from:'0xc6a950f25a9f5e2a72cd9d279e642d0e31035feb'},function(err,transactionHash){
if(err)
console.log("发送失败")
else
console.log("现有余额:")
chishiContract.methods.getBalance(to).call(console.log)
}) ui

 

 

6.运行spa

 

 

7.总结code

现阶段碰到的问题 以及未解决的问题 可能有错误的地方 (总结个毛 拉跨就完事)

相关文章
相关标签/搜索