简述智能合约--基于交付的项目

作者: 31f23a3cab12 | 来源:发表于2018-08-12 18:46 被阅读38次

    最近刚交付的一个区块链项目。

    这个是基本的智能合约的需求方案:
    • 建材尤其是大宗交易,订货,交割问题。
    • 智能合约,解决卖家信用
    “假一赔十”,基于智能合约,自动进行赔付。用户无法真正信任建材供应商的广告。 基于触发的赔付条件,解决主管判断赔付标准的问题。因为区块链智能合约不能修改的特性,赔付过程将通过锁定在智能合约上的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/

    相关文章

      网友评论

      • 8337ea5e8883:您好,您的文章写的真好,方便加微信邀请您成为我们的签约作者嘛?

      本文标题:简述智能合约--基于交付的项目

      本文链接:https://www.haomeiwen.com/subject/lfxebftx.html