区块链-web3与智能合约交互

web3js

            Web3.js是以太坊官方的Javascript API,能够帮助智能合约开发者使用HTTP或者IPC与本地的或者远程的以太坊节点交互。实际上就是一个库的集合,主要包括下面几个库:css

                     web3-eth用来与以太坊区块链和智能合约交互html

                     web3-shh用来控制whisper协议与p2p通讯以及广播前端

                     web3-bzz用来与swarm协议交互node

                     web3-utils包含了一些Dapp开发有用的功能git

            Web3与geth通讯使用的是 JSON-RPC ,这是一种轻量级的RPC(Remote Procedure Call)协议,整个通讯的模型能够抽象为下图。github

package.json的学习

链接:   web

http://www.noobyard.com/article/p-rpaccwev-bu.htmlnpm

http://www.noobyard.com/article/p-ssxujmmn-ba.htmljson

npm

npm是什么,官方文档介绍的是:

           npm makes it easy for JavaScript developers to share and reuse code, and it makes it easy to update the code that you’re sharing.网络

          简单来讲就是:npm 是一个包管理器,它让 JavaScript 开发者分享、复用代码更方便

           在写程序时,咱们不免会使用到其余人写的框架,而这些重复的代码框架被称做package,或者module。一个包能够是一个文件夹里放着几个文件,同时有一个叫作 package.json 的文件。

做用

           开发者使用它来管理、安装、发布模块

初步理解

建立

            使用 node.js 的包管理工具 npm 初始化项目,建立package.json 文件,其中保存了项目须要的相关依赖环境。npm init自动生成,也能够手写。

npm init

内容

package.json 文件至少要有两部份内容:

  1. “name”
    • 所有小写,没有空格,可使用下划线或者横线
  2. “version”
    • x.x.x 的格式
    • 符合“语义化版本规则”

其余内容:

    description:描述信息,有助于搜索

    main: 入口文件,通常都是 index.js

    scripts:支持的脚本,默认是一个空的 test

    keywords:关键字,有助于在人们使用 npm search 搜索时发现你的项目

    author:做者信息

    license:默认是 MIT

            bugs:当前项目的一些错误信息,若是有的话

注意:
若是 package.json 中没有 description 信息,npm 使用项目中的 README.md 的第一行做为描述信息。这个描述信息有助于别人搜索你的项目,所以建议好好写 description 信息。

             咱们须要在 package.json 文件中指定项目依赖的包,这样别人在拿到这个项目时才可使用 npm install 下载。

一个 package.json 文件能够有如下几点做用:

  1. 做为一个描述文件,描述了你的项目依赖哪些包
  2. 容许咱们使用 “语义化版本规则”(后面介绍)指明你项目依赖包的版本
  3. 让你的构建更好地与其余开发者分享,便于重复使用

 

本地安装package

npm 使用下面的命令下载一个包:

npm install <package_name>

 

运行下面命令安装web.js

npm install web3

  1. 合约与搭链
  1. 测试链

可使用ganach,也可使用testrpc。

链接的方式为

       Main Ethereum Network //主网链接

             https://mainnet.infura.io/  + key

      Test Ethereum Network (Ropsten) // Ropsten测试网   链接其余的测试网络百度

            https://ropsten.infura.io/  + key

      以太坊测试网络/测试链(Rinkeby):

           https://rinkeby.infura.io/<your-token>

      以太坊测试网络/测试链(Kovan):

            https://kovan.infura.io/<your-token>

      以太坊测试网络/测试链 (Ropsten):

智能合约

        Remix IDE上面编写以及部署。

交互

前端代码

           Index,css,js等前端的常规代码。

web3js代码

           使用web3js中的web3对象,经过rpc与节点通讯。

           Web3中有eth对象,web3.eth,具体来实现与区块俩之间的交互,

首先引入核心js

<script src="./node_modules/web3/dist/web3.min.js"></script>

web3.min.js:是web3核心代码。

获取核心的web3对像

if (typeof web3 !== 'undefined') {

            web3 = new Web3(web3.currentProvider);

        } else {

            // set the provider you want from Web3.providers

            web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"));

        }

HttpProvider -- * 获取对象的地址。本地直接填上面的就好了。

经过web3获取发布到去区块链的合约

A: 地址,合约地址

B: 获取ABI字符串。  复制好的ABI保存到JS。以JSON字符串形式保存。

        经过web核心对象加在合约

                          tokenObject = web3.eth.contract(abi,default_account).at(contractAddr);

                                            abi -- * 以上复制的ABI JSON字符串。

                                             default_account -- 发布合约的帐户地址。不是必须项目。

                                             contractAddr  --* 合约地址。

方法调用成功返回智能合约对象,在就能够调用在智能合约中定义的方法。

实例:http://www.noobyard.com/article/p-droxhrjw-kk.html