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

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • 月是故乡圆 文/西北的放羊娃 自上大学以来,今年有幸能回家。好几年没有回家了,乡间的小路已经铺上了沙子,路旁的树木...
    西北的放羊彪阅读 1,183评论 32 45
  • 初次接触是在手机上,你在那个组合中不大起眼,只是在跳舞,和他俩。 我也没多大注意你 喜欢?并不,只怪得有点丑 ...
    泪隐心阅读 225评论 0 0
  • 东京爆发连续女童杀人案,凶手作案后将女童尸体肢体异常姿态摄影并发送警方,搜查官钟卷追查到作案现场,冲入时发现凶手正...
    fruitmiao阅读 7,185评论 5 17