【DAPP开发二】web3.js调用合约

启动

第一步

创建一个目录作为以太坊的数据存放目录

第二步

创建一个配置文件用来做创世区块以及设置网络genesis.json

{
"config": {
"chainId": 18, 是本私有链的ID
"homesteadBlock": 0, 指明Homestead版本的兼容的区块开始编号
"eip155Block": 0, 兼容的区块开始编号
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x2",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",nonce 和 mixhash 是作为输入,让每个节点都可以通过计算来做
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}

说明:

  • noncemixhash是作为输入,让每个节点都可以通过计算来做
  • proof-of-work,确认这个区块的挖掘者确实做了足够多的计算找到了合法的
  • difficulty就是制定了本链一开始的挖矿难度,在我们的私有测试节点中,这个值设得很低,这样就比较容易挖到矿
  • alloc 可以预分配一些以太币给某些地址
  • coinbase 就是当成功挖出 genesis区块后,接收奖金的地址
  • timestamp两个区块的时间戳之差来调整挖矿的难度
  • parentHash指向前一个区块的哈希指针
  • extraData 可用于存储任何信息
  • gasLimit 规定了每一个区块中能够消耗的最大的 gas值,也就事实上限制了区块的大小
  • config 用来为这个私有网络确立一系列参数

第三步

初始化 genesis 文件

cd ~/test/private //目录换成你自己的目录
geth --datadir . init genesis.json

第四步

启动节点

geth --datadir . --networkid 4224 --rpc --rpcport 8545 --port 30303 --rpccorsdomain="*" -rpcapi eth,web3,personal,net console 2> log.txt

命令太长了,可以写一个 .sh 文件,运行的时候,直接在命令行 ./rungeth.sh (如遇到没有权限用 chmod 777 rungeth.sh 加权限)

--datadir ./data 数据位置指定
--port 30303 不同的节点之前连接的端口号
--rpc 允许远程访问
--rpcaddr 0.0.0.0 本地的任意有效IP作为连接IP
--rpcport 8545 服务的端口号
--rpcapi 'db,net,eth,web3,personal' rpc远程调用的模块
--rpccorsdomain '*' 可以跨域访问
console 控制台
2> 1.log 它会把输出的命令存在 log 里

找帮助指令:
geth -h |grep rpc

第五步

启动成功就会进入geth控制台了,在控制台里可以做一些事情,有以下命令: https://www.jianshu.com/p/8250e209902f

参考:使用Web3.js查询以太币和代币余额以及转账https://www.jianshu.com/p/496c9d833df9

第一步 node.js 服务器端

搭建node.js 的基本环境,然后启动 node.js
var Web3=require("web3");
var web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:8545"));
var abi=[
    {
        "constant": false,
        "inputs": [
            {
                "name": "_message",
                "type": "string"
            }
        ],
        "name": "setMessage",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "getMessage",
        "outputs": [
            {
                "name": "",
                "type": "string"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    }
];
var address="0xd069af98379fe4326c33f6718e0ce820c0f63a55";
var message = new web3.eth.Contract(abi,address);
router.get("/getMessage",function(req,resp){
        message.methods.getMessage().call(function(error,result){
                resp.send(result);
        });
});

第二步

在小程序端掉用以太坊的数据

调用小程序提供的api 去请求中心化的服务器node.js 的数据
wx.request({
      url: 'http://localhost:3000/user/getMessage', //仅为示例,并非真实的接口地址
      success: function (res) {
        console.log(res.data)
        _this.setData({
            message:res.data
        })
      }
})

你可能感兴趣的:(【DAPP开发二】web3.js调用合约)