区块链入门教程--开发编译部署调用HelloWorld合约

Posted 程序员大阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链入门教程--开发编译部署调用HelloWorld合约相关的知识,希望对你有一定的参考价值。

文章目录

1. 任务背景

FISCO BCOS运用智能合约进行归纳资产管理、规则定义和价值交换等操作,所以我们需要学习如何使用智能合约。

2. 任务目标

开发一个最基本的HelloWorld智能合约。

3. 相关知识点

智能合约概念:

智能合约概念于1995年由Nick Szabo首次提出,指以数字形式定义的能自动执行条款的合约,数字形式意味着合约必须用计算机代码实现,因为只要参与方达成协定,智能合约建立的权利和义务,就会被自动执行,且结果不能被否认。

智能合约生命周期:

智能合约的生命周期为设计,开发,测试,部署,运行,升级,销毁等几个步骤。开发人员根据需求,进行智能合约代码的编写,编译,单元测试。合约开发语言可包括solidity, C++, java, go, javascript, rust等,语言的选择根据平台虚拟机选型而定。

智能合约开发语言Solidity:

Solidity 是 Ethereum 的一种契约型编程语言,其语法与 JavaScript 类似。

4. 任务实操

上面说的多少有点抽象,接下来我们开始实操。

4.1 新建合约文件

在合约管理-合约IDE中点击红圈中的新建文件按钮

合约名称设置为HelloWorld后确认

4.2 编写合约代码

右侧编写HelloWorld合约,该合约提供两个接口,分别是get()和set(),用于获取/设置合约变量name。合约内容如下:

pragma solidity ^0.4.24;
contract HelloWorld 
    string name;
    function HelloWorld() 
        name = "Hello, World!";
    
    function get()constant returns(string) 
        return name;
    
    function set(string n) 
        name = n;
    

4.3 保存、编译、部署合约

依次点击保存、编译、部署合约按钮。


注意点击部署后,需要联动新增用户。

输入用户名即可:

部署注意合约地址信息,可以点击红圈中按钮复制合约地址。

4.4 调用合约

点击合约调用按钮,调用刚刚复制的地址(即为部署的HelloWorld合约),调用其set方法,同时传入参数先定个小目标赚他一个亿。最后点击确认。

点击后提示成功,如下图:

此处发现一枚彩蛋,上面这个提示成功提示框,不是Element框架里面的Message组件么哈哈。

然后我们再调用合约中的get方法,将name读取出来:

调用结果如下:

5. 任务总结

HelloWorld程序相对还是很简单,容易理解。

注意咱们上面编写的程序,跟之前的最大区别是。这个程序是部署到区块链上运行、调用的,所以它具备区块链系统的能力,不可小觑之。

区块链 xuperchain 命令行 部署使用EVM 合约 教程

一、创建合约账户

# 16位数字组成的字符串
./xchain-cli account new --account 1111111111111111 

# 增加fee参数,重新执行
./xchain-cli account new --account 1111111111111111 --fee 1001

命令运行后就会调用xchain的系统合约功能 NewAccount 创建一个名为 XC1111111111111111@xuper (如果链名字为xuper)的账号

 

给该账户充钱,以便对后面的合约进行部署

./xchain-cli transfer --to XC1111111111111111@xuper --amount 100000000000 --keys data/keys/
./xchain-cli account balance XC1111111111111111@xuper -H 127.0.0.1:37101

 

 

二、开启evm合约功能

1. 修改每个节点的conf/xchain.yaml

确保evm合约功能开启

vim conf/xchain.yaml

 

2. 重启每个节点

暂时没有停止命令,所以使用ps -ef | grep xchain 查找到进程号,然后kill。

本文直接采用重启机器。

然后,启动每个节点

nohup ./xchain &

等一会确认每个节点是否连上

./xchain-cli status -H 192.168.92.129:37101

 

三、编译

1. 安装solc编译器

请参见https://solidity-cn.readthedocs.io/zh/latest/installing-solidity.html。

sudo snap install solc
solc --version
// solc, the solidity compiler commandline interface
// Version: 0.5.9+commit.c68bc34e.Darwin.appleclang

2. 编写智能合约

我们以contractsdk/evm/example中的counter合约为例

pragma solidity >=0.0.0;

contract Counter {
    address owner;
    mapping (string => uint256) values;

    constructor() public{
        owner = msg.sender;
    }

    function increase(string memory key) public payable{
        values[key] = values[key] + 1;
    }

    function get(string memory key) view public returns (uint) {
        return values[key];
    }

    function getOwner() view public returns (address) {
        return owner;
    }

}

3. 编译合约

cd ../core/contractsdk/evm/example/counter
// 通过solc编译合约源码
solc --bin --abi Counter.sol -o .
// 合约二进制文件和abi文件分别存放在当前目录下,Counter.bin和Counter.abi

四、部署合约 

cd ~/xuper/xuperchain/output
./xchain-cli evm deploy --account XC1111111111111111@xuper --cname counterevm  --fee 5200000 ../core/contractsdk/evm/example/counter/Counter.bin --abi ../core/contractsdk/evm/example/counter/Counter.abi
  • --abi Counter.abi :表示部署需要使用的abi文件,用于合约方法参数编解码

  • ``-a ``:如果合约需要构造函数,通过-a进行指定。与c++、golang等合约的部署和调用方式相同。

counterevm为自定义的合约的名字,后面查询时也是使用这个名字

 

 

 

 

五、合约调用

调用solidity合约。通过合约名直接发起合约调用和查询。

# 调用solidity合约,increase方法,counterevm为合约名
./xchain-cli evm invoke --method increase -a '{"key":"test"}' counterevm --fee 22787517

# 调用solidity合约,get方法,counterevm为合约名
./xchain-cli evm query --method get -a '{"key":"test"}' counterevm
# 调用结果,其中0表示返回值的次序,1为返回值
# key,value: 0 1

 

 

 

 

参考

https://xuper.baidu.com/n/xuperdoc/advanced_usage/contract_accounts.html

以上是关于区块链入门教程--开发编译部署调用HelloWorld合约的主要内容,如果未能解决你的问题,请参考以下文章

以太坊 DApp 开发入门实战! 用Node.js和truffle框架搭建——区块链投票系统!

Flow区块链NFT开发及部署教程Cadence合约

区块链入门Truffle 项目实战,Solidity IDE, 智能合约部署

蚂蚁区块链BaaS平台应用开发指南:JavaSDK的接入

区块链 xuperchain 命令行 部署使用EVM 合约 教程

gethGo语言调用智能合约 | 一起来学区块链