合约入门

本文作为基础,供读者初步理解智能合约的编写、部署和调用。若需要开发应用,请使用高级的智能合约开发框架web3sdk。

准备

查看需要部署智能合约的链,对应的节点RPC端口

  1. cd /mydata/FISCO-BCOS/tools/scripts/
  2.  
  3. #sh node_info.sh -d 要查看信息的节点目录
  4. sh node_info.sh -d /mydata/node0/

得到端口

  1. RPC address: 127.0.0.1:8545

设置需要操作的链的RPC端口,输入y回车确认。

  1. cd /mydata/FISCO-BCOS/tools/script/
  2.  
  3. #sh set_proxy_address.sh -o 节点的RPC address
  4. sh set_proxy_address.sh -o 127.0.0.1:8545

此后,所有的操作都会发送到127.0.0.1:8545端口上,即node0上。

编写合约

  1. cd /mydata/FISCO-BCOS/tools/contract/
  2. vim HelloWorld.sol

HelloWorld.sol的实现如下

  1. pragma solidity ^0.4.2;
  2. contract HelloWorld{
  3. string name;
  4. function HelloWorld(){
  5. name="Hi,Welcome!";
  6. }
  7. function get()constant returns(string){
  8. return name;
  9. }
  10. function set(string n){
  11. name=n;
  12. }
  13. }

编译、部署合约

直接使用deploy.js,自动编译和部署合约。

  1. # 进入合约所在目录
  2. cd /mydata/FISCO-BCOS/tools/contract
  3. babel-node deploy.js HelloWorld #注意后面HelloWorld后面没有".sol"

输出,可看到合约地址,部署成功。

  1. deploy.js ........................Start........................
  2. Soc File :HelloWorld
  3. HelloWorldcomplie success
  4. send transaction success: 0xa8c1aeed8e85cc0308341081925d3dab80da394f6b22c76dc0e855c8735da481
  5. HelloWorldcontract address 0xa807685dd3cf6374ee56963d3d95065f6f056372
  6. HelloWorld deploy success!

调用合约

编写合约调用程序

用nodejs实现,具体实现方法请直接看demoHelloWorld.js源码。

  1. # 进入合约所在目录
  2. cd /mydata/FISCO-BCOS/FISCO-BCOS/tools/contract
  3. vim demoHelloWorld.js

调用合约

执行合约调用程序

  1. # 进入合约所在目录
  2. cd /mydata/FISCO-BCOS/FISCO-BCOS/tools/contract
  3. babel-node demoHelloWorld.js

可看到合约调用成功

  1. { HttpProvider: 'http://127.0.0.1:8545',
  2. Ouputpath: './output/',
  3. privKey: 'bcec428d5205abe0f0cc8a734083908d9eb8563e31f943d760786edf42ad67dd',
  4. account: '0x64fa644d2a694681bd6addd6c5e36cccd8dcdde3' }
  5. HelloWorldcontract address:0xa807685dd3cf6374ee56963d3d95065f6f056372
  6. HelloWorld contract get function call first :Hi,Welcome!
  7. send transaction success: 0x6463e0ea9db6c4aff1e3fc14d9bdb86b29306def73e6d951913a522347526435
  8. HelloWorld contract set function call , (transaction hash 0x6463e0ea9db6c4aff1e3fc14d9bdb86b29306def73e6d951913a522347526435)
  9. HelloWorld contract get function call again :HelloWorld!