美文网首页区块链DAPP
【DAPP开发二】web3.js调用合约

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

作者: GeniusWong | 来源:发表于2018-09-24 01:14 被阅读95次

    启动

    第一步

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

    第二步

    创建一个配置文件用来做创世区块以及设置网络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调用合约

        本文链接:https://www.haomeiwen.com/subject/slhcoftx.html