本文主要是介绍区块链笔记:关于Solidity的具体示例程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
智能合约示例
-
以太坊上的智能合约是可以非常复杂的,可以实现游戏, 投票系统,众筹系统,包括实现电商等
-
有些只是能实现,但不一定在正式环境中可以使用, 站在技术角度来看下DApp的合约实现,这里我们看下四则运算智能合约示例
-
首先运行
ganache-cli
命令启动,看到创建10个地址,并且监听在8545端口 -
下面是一个算法的智能合约具体示例
pragma solidity ^0.4.19;contract algorithm {// additionfunction Add(uint a, uint b) public pure returns(uint) {uint r = a + b;return r;}// reducefunction Reduce(uint a, uint b) public pure returns(uint) {uint r = a-b;return r;}// multiplefunction Multiple(uint a, uint b) public pure returns(uint) {uint r = a * b;return r;}// dividefunction Divide(uint a, uint b) public pure returns(uint) {uint r = a/b;return r;}// powfunction Pow(uint a, uint b) public pure returns(uint) {uint r = a ** b;return r;} }
-
以上代码仅作为演示, 没有具体做条件判断等鲁棒校验
-
这样的一份合约中,没有状态变量,数组,仅仅是几个方法而已,对于这一份合约来说没有属性状态,仅仅是工具方法
-
这份合约从编译到部署会经历什么过程呢?
- 使用truffle工具创建一个truffle目录 $
truffle init
(这个命令是从github上下载一份最简洁的模板代码) - 我们可以把上面编写的合约放在contracts目录之下
- 之后进行编译,使用命令:$
truffle compile
产生字节码,存放于build/contracts之下- Compiling ./contracts/algorithm.sol …
- Writing artifacts to ./build/contracts
- 然后进入migrations目录,编辑
2_deploy_contracts.js
文件,没有则创建新的文件var Algorithm = artifacts.require("./Algorithm.sol")module.exports = function(deployer) {deployer.deploy(Algorithm); };
- 使用truffle工具创建一个truffle目录 $
部署调用
- 上面已经把Algorithm.sol编译成字节码了
- 执行$
truffle migrate
命令部署到ganache(这里是我们的模拟节点) - 打开
truffle-config.js
中networks下面的development配置,如果存在请忽略development: {host: "127.0.0.1", // Localhost (default: none)port: 8545, // Standard Ethereum port (default: none)network_id: "*", // Any network (default: none) }
- 注意这里同时提前启动ganache,$
ganache-cli
默认端口8545
- 注意这里同时提前启动ganache,$
- 在项目目录下执行$
truffle console
进入truffle控制台 - 到truffle的build子目录,打开Algorithm.json文件
- 从Algorithm.json复制出abi内容段,abi是指应用程序二进制接口,描述了智能合约中方法的类型,返回值等
- 控制台执行:$
abi=你复制出的abi内容段
- 从Algorithm.json中找到合约地址也就是Address字段,因为我们要调用合约方法,得知道合约的地址
- 从控制台执行如下命令:mycalc=web3.eth.contract(abi).at(“0xeE1428686CF00f4fcD7722074f4fa3808feBdbd5”)
- at里面的参数是Algorithm这份合约的地址
- 合约方法调用 $
mycalc.Add.call(10,20)
就能返回30 - 以上是旧版的写法,比较原始,也许新版不再支持,仅当做参考
- 后续我们使用一些更加方便智能的调用方法,如:SDK, 模板框架直接调用合约
参考
- https://www.jianshu.com/p/6b10755ff8a4 这里更为详细些
- http://cw.hubwiz.com/card/c/web3.js-1.0/1/4/1/ 相关API文档
这篇关于区块链笔记:关于Solidity的具体示例程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!