最近刚交付的一个区块链项目。
这个是基本的智能合约的需求方案:
• 建材尤其是大宗交易,订货,交割问题。
• 智能合约,解决卖家信用
“假一赔十”,基于智能合约,自动进行赔付。用户无法真正信任建材供应商的广告。 基于触发的赔付条件,解决主管判断赔付标准的问题。因为区块链智能合约不能修改的特性,赔付过程将通过锁定在智能合约上的STO代币执行,从而保障了承诺的赔付必定会得到履行。
• 建材二次使用转移问题
○ 共享经济:剩余建材共享,线上商城二次销售。
• 建材溯源
• 建材商城
一、基于以太坊合约的ERC20代币
• Tokens是具备权益凭证属性的区块链应用项目的代币,这些区块链应用项目都是在基础链上发展出来的,具有特定应用场景的DAPP或者智能合约等,Tokens是这些应用链的“代币”集合统称。我们可以理解成:凡是建立在基础链上面的应用项目,它们发行的代币(应用代币)属于Tokens,带有“权益凭证”的属性。
• 关键字:代币、权益证明、通证
• Token实现了资产的数字化和价值的流通
• 区块链则为Token提供了必要的基础设施
二、开发环境搭建
windows下开发环境:
• Geth 工具 (命令行工具)
• Node.js (javascript运行环境)
○ 安装后,提供 truffle、npm 运行环境
○ 框架-Truffle - 最为流行的智能合约开发、测试和部署框架。经常与 Ganache (也是由 Truffle 团队开发) 一起搭配使用。
相关工具-Truffle boxes - 一些打包好的组件
• Vscode (开发solidity的智能合约,轻量级代码编辑器)
○ Visual Studio Code - ,好多支持 solidity 的插件。
○ 语言-Solidity - 官方推荐以太坊智能合约开发语言,也是目前最为主流的智能合约语言。
相关下载,搜索后进入官网,建议先在官网把相关文档过一遍
https://nodejs.org/
https://geth.ethereum.org/downloads/
https://code.visualstudio.com/
测试工具及环境:
• Ganache
• Etherum-Wallet 以太坊钱包
• MateMask
• Remix
○ 集成开发环境-Remix - 一个基于solidity语言的在线智能合约开发IDE,它提供从编译,调试到部署的全流程支持。
• EtherScan
○ 浏览器-Etherscan - 最为流行的以太坊浏览器,用于查看交易信息和合约代码
• gas 计算-EthGasStation - 估计交易费用和时间的网站
• 常用以太坊交互代码库
• Web3.js - 以太坊官方的 Java API
• Eth.js - 优化过的 Web3.js
三、基于ERC20 编写智能合约
什么是智能合约
• 智能合约就是区块链上一个包含合约代码和存储空间的虚拟账户。简单说,就是一个协议,会在区块链检测到某些特定数据条件下时触发。
• 基于 消息和事件 进行触发合约执行
四、合约执行过程
• Truffle compile 智能合约进行编译,生成字节码,成功后会在项目目录中生成一个build的目录
○ 重新编译所有的代码 truffle compile --all
• Truffile migrate 合约部署,
○ 重新部署合约 truffle migrate --reset
五、如何进行合约初始化
这个初始化,指的是合约部署到区块链上后,代币名称、总发行量 等
一般分两种,无参初始化和带参初始化
如果熟悉C#类中有 构造函数,在这个类初始化时,该构造函数 就自动执行了。
那在智能合约中,当合约部署到区块链上的时候,该构造的业务就执行了,不需要显示的去调用。
• 要在以太坊上进行操作,必需要有以太坊账户。
当前有两类账户类型:
• 外部账户EOA,可简单认为是“人类用户”,有私钥和余额,交易发送前会用私钥先签名。例如 钱包。
• 合约账户CA,合约部署之后,会随之对应有一个账户,由余额和相应的合约状态数据。它由外部消息来触发执行。触发源来自外部账户或其他合约账户。
常见的编码套路有:
• 对于支付,优先采用“取款”,而不是“转账”(即send或transfer),避免接收合约恶意fallback函数。
• 对于支付,采用CDI模式,避免重入问题。即:
○ 检查 -> 更改本合约状态 ->支付。
• 善用Modifier进行权限控制。
• 使用mapping类型保存合约数据,甚至为了方便升级,单独分离出两类:
○ 数据合约,仅包含mapping,保留操作mapping的函数,客观上类似数据表。
○ 控制合约,仅包含逻辑控制,通过数据合约的接口操作数据。若逻辑有问题,只需升级本合约即可,数据仍然得以保留。
如果要把智能合约的安全等级 升一级,强烈推荐基于 OpenZeppelin 进行重构,前提是业务一定要清
OpenZeppelin ,简书和 git上可自行查阅
openzeppelin-solidity,安全合约库
来自 <https://www.jianshu.com/p/d78353772029>
使用测试或者调试器与合约进行交互非常好,或者你也可以手动执行交易。 Truffle 提供了两种简单的方式与合约交互。
• 入口:在vscode菜单中打开,点击 “集成终端”
• Truffle console 一个可以和任何以太坊客户端交互的交互式控制台。
• Truffle Develop 一个提供了本地私有开发链的交互式控制台。
这里的 truffle develop ,是开发智能合约运行,最简便的方式,不需要考虑区块链环境。从本地就直接运行了一个私有链环境,这个链只能你本机能访问到,其它机子无法访问。
六、测试链的选择:
Ropsten 以太坊官方提供的测试网络,使用pow共识机制
Kovan 使用权威证明的共识机制,简称poa
Rinkeby 以太坊官方提供的测试网络,使用poa共识机制
在 Ropsten测试链环境下:
• 新建用户账户,搭建节点
○ Personal.newAccount()
• 导入原有账户,搭建节点
同步区块的方式:
Full Node 全节点
Lite Node 轻节点,只同步个人的账户信息,该模式不能挖矿
Fast 同步区块头的模式,速度快一些
七、发布后获得 合约地址、ABI 等参数,在前端进行调用合约交互
相关参数获取:
• 测试链的机子ip 和 端口 (--rpcport "8545",该命令指定发布出去的端口)
• 合约地址 在build 文件夹下面找对应的合约名称的文件
• ABI信息 在build 文件夹下面找对应的合约名称的文件
我们前面说到过,测试链 执行合约,是需要消耗gas的,测试链服务端开启挖矿模式,就会慢慢获得gas,那么其它账户如何也能获得gas,进行相关业务操作?
通过命令,从0号账户给 1号账户 ,转1个eth
Eth.sendTransaction({from:eth.acounts[0], to:eth.accounts[1], value:web3.toWei(1,"ether") });
toWei 代表把1个eth以太币,转换成 wei 单位,1eth=10 ** 18 wei;
三种方式与区块链交互
• Javascript control geth控制台
• Json-rpc 无状态远程调用协议
• Web3.js 以太坊提供的javascript库
八、在以太坊Ropsten浏览器上,查询交易记录
以太坊主网地址:
https://etherscan.io/
网友评论