上期《众说区块链》讨论的主题是“数字货币交易所”,围绕这个的相关主题,大家对这方面的相关话题展开了进一步的谈论。

本期《众说区块链》讨论的主题是“智能合约在建材链上的落地实践”。吉祥老师结合自身,以建材链STO项目为主,详细介绍了项目背景、STO与建材的结合方式,开发环境准备,基于ERC20 编写智能合约,测试链的分类,及在Ropsten下搭建节点,将智能合约部署上去等干货。

主题:智能合约在建材链上的落地实践

时间:8月11日(周六)晚9点-11点

主持人:佩瑶

特约嘉宾:吉祥

讨论实录

@颜颜:大家好,本周六,HiBlock区块链社区特别栏目《众说区块链》准时和大家见面啦,我是主持人佩瑶,非常感谢大家对社区的支持。

《众说区块链》由HiBlock区块链社区发起,每周六晚9点,在社群内组织一个区块链相关主题的讨论,在讨论过程中加深社区成员对区块链的理解。

在这个数字加密货币百花齐放的时代,数字加密货币已经成为我们重要资产的组成部分。而智能合约的安全影响着数字加密货币的价值,如BEC因为智能合约出现漏洞,蒸发了60亿,如此可见智能合约安全的重要性。智能合约是运行在公链上的,那么公链出现安全问题,可能会导致智能合约无法正常运行,公链之于智能合约,就犹如Android之于App,底层的安全更重要。

本次讲解以建材链STO项目为主,吉祥老师将详细介绍项目背景、STO与建材的结合方式,开发环境准备,基于ERC20 编写智能合约,测试链的分类,及在Ropsten下搭建节点,将智能合约部署上去。前端页面调用方式?以及开发过程中遇到的坑跟大家聊聊。

接下来欢迎本期特约嘉宾 吉祥,带领大家一起聊聊建材链~~~

知识干货

@吉祥:今天跟大家聊聊 智能合约在建材链上的应用

STO(Stone Token)的核心目标:

建立一个 去中心化的建材行业可靠规范可信的生态体系,连接每一个建材从业者,消费者可以追溯每一个建材的来源渠道及授权证明、时间等信息,建材从业者通过Token技术服务和管理,让建材数字资产便捷流通成为现实。

项目背景:

• 近年来,比特币和智能合约平台以太坊为代表的区块链技术高速发展,开创了一个革命性的新产业,发展出全新的商业和投资模式,对每个行业都呈现出不可估量的应用潜力,对于建材行业同样如此,并将深刻影响该行业的发展。

• 基于区块链的优势 与 建材行业的痛点,两方形成互补,形成新型生态模式。

为了有效激励生态建设者与参与者,实现生态的繁荣与增长,我们发行在建材生态圈内流通的原生通证 STO。

产品方案:

• 建材尤其是大宗交易,订货,交割问题。

• 智能合约,解决卖家信用

“假一赔十”,基于智能合约,自动进行赔付。用户无法真正信任建材供应商的广告。 基于触发的赔付条件,解决主管判断赔付标准的问题。因为区块链智能合约不能修改的特性,赔付过程将通过锁定在智能合约上的STO代币执行,从而保障了承诺的赔付必定会得到履行。

• 建材二次使用转移问题

○ 共享经济:剩余建材共享,线上商城二次销售。

• 建材溯源

• 建材商城

基于以太坊合约的代币

• 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 init

在 vscode中项目的目录结构

• Contracts solidity合约编写的目录

• Migrations 存放部署合约脚本

• Build 合约编译后生成的目录

• Test 单元测试的目录

• Truffile.js truffle 默认的配置文件

合约执行过程

• Truffle compile 智能合约进行编译,生成字节码,成功后会在项目目录中生成一个build的目录

○ 重新编译所有的代码 truffle compile –all

• Truffile migrate 合约部署,

○ 重新部署合约 truffle migrate –reset

如何进行合约初始化

这个初始化,指的是合约部署到区块链上后,代币名称、总发行量 等

一般分两种,无参初始化和带参初始化

例如我下面的这段,无参初始化,在构造函数中,就指明了代币所有者、发行总量等。如果想动态初始化,构造中加入参数,部署操作时,传入即可。

@吉祥:在这里,有没有疑问,这个初始化如何执行或者调用呢??

如果熟悉C#,类中有 构造函数,在这个类初始化时,该构造函数就自动执行了。

那在智能合约中,当合约部署到区块链上的时候,该构造的业务就执行了,不需要显示的去调用。

• 要在以太坊上进行操作,必需要有以太坊账户。当前有两类账户类型:

• 外部账户,可简单认为是“人类用户”,有私钥和余额,交易发送前会用私钥先签名。例如 钱包。

• 合约账户,合约部署之后,会随之对应有一个账户,由余额和相应的合约状态数据。它由外部消息来触发执行。触发源来自外部账户或其他合约账户。

常见的编码套路有:

• 对于支付,优先采用“取款”,而不是“转账”(即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 ,是开发智能合约运行,最简便的方式,不需要考虑区块链环境。从本地就直接运行了一个私有链环境,这个链只能你本机能访问到,其它机子无法访问。

@吉祥:这里使用Truffle Develop。这个是truffle内置的客户端,帮助你使用简单的命令来创建一个完整的区块链环境,没有安装要求。跟命令行版本的Ganache基本类似。唯一要注意的是在truffle develop里执行truffle命令的时候需要省略前面的“truffle”,比如“truffle compile”只需要敲“compile”就可以了。

单元测试:

默认生成的项目,在根目录有 test 文件夹,按照 编码格式,构建相应业务的检测。

Truffle 提供了一个 自动化测试框架,分两种编码格式:

在javascript中编写,测试从外部执行我们的合约

在solidity 中编写,测试从内部执行我们的合约

测试链的选择:

Ropsten 以太坊官方提供的测试网络,使用pow共识机制

Kovan 使用权威证明的共识机制,简称poa

Rinkeby 以太坊官方提供的测试网络,使用poa共识机制

在 Ropsten测试链环境下:

• 新建用户账户,搭建节点

○ Personal.newAccount()

• 导入原有账户,搭建节点

同步区块的方式:

Full Node 全节点

Lite Node 轻节点,只同步个人的账户信息,该模式不能挖矿

Fast 同步区块头的模式,速度快一些

查找帮助 Geth -h

那有个疑问,什么是Geth呢?

Geth 全称是 go-ethereum,看到这个,是不是清晰了一些,是以Go语言编写的以太坊客户端。

Geth 创建节点,同步区块,geth命令

geth –unlock 0x3429ce9c987385aa144bef0b249dae1368cd87f9 –datadir testnet –testnet -syncmode “fast” –rpc –rpcport “8545” –rpcapi db,eth,net,web3,personal –port “30303” –rpccorsdomain “*” –ipcdisable –mine

参数解读:

–unlock 解锁账户

–datadir 文件夹 将同步区块放在哪个文件夹下

–testnet 默认在 Ropsten测试链

–syncmode “fase” 同步区块模式,快速

–rpc 表示开启HTTP-RPC服务

–rpcport “8545” 指定HTTP-RPC服务监听端口号 (默认8545)

–rpcapi 需要哪些api

–port “30303” port端口

–mine 默认启动挖矿

执行上面的 geth 命令后,就开始同步区块,目的是把网络上的区块全部下载到本地,与网络同步最新状态。

六、发布后获得 合约地址、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/

@吉祥:本次主题是,智能合约在建材链上的落地实践,建材可溯源,将建材实际的流转起来,通过购买建材送STO代币,代币可进行消费,形成这样一个生态体系。本次分享,以技术为主,有问题大家及时交流,相互学习

互动阶段

@杨镇:业务流程能否再细说下?建材如何与token

@杨镇:对应

@吉祥:通过一段时间的项目实战发现,像 truffle 、geth 等 api很全,直接进官网 或者 在命令行 -h 进行帮助,都能找到想要的内容。效率相对会高一些

@杨镇:有物联网制支持了么?

@吉祥:与物联网没有支持

@杨镇:那建材如何跟token相对应?业务上怎么走通?

@吉祥:购买建材,送 STO代币, 进行一定的比例锚定, 代币可购买建材,进行流通,

@杨镇:这个锚定能否再解释一下下?

@Kevin:有个问题,ETH客户端中EVM的gas和字节码和stateDB这几部分关系架构是什么呢?能否详细梳理讲一下?

@吉祥:Gas 是 执行交易消耗的比特币,由 消耗的数量 * 单价 来决定

@吉祥:字节码 是 合约编译后,在 build文件夹中生成的二进制码等文件,文件中可获取到 合约地址和 ABI 信息

@ATU:你们的代币有什么用呢

@Kevin:因为现在个人负责项目工作是改写以太坊EVM那块,在开发公链这样

@Kevin:还有个问题,ETH客户端中EVM的gas和字节码和stateDB这几部分关系架构是什么呢?能否详细梳理讲一下?

@杨镇:@Kevin 你的这个问题要看黄皮书和客户端源码。stateDB就是levelDB,用键值对形式保存每个区块定稿后的stateRoot和整个state Trie的对应关系,每个状态变动会在当前 state Trie中根据设定的算法修改相应的键值。EVM的处理是独立的,每个原始交易会触发一个EVM执行,EVM执行中又会触发子执行,这个过程中都可能修改 stateDB,在交易结束的时候会看这些执行中是否有错误,如果有,会把整个执行的状态修改撤销,如果没有,则commit到stateDB,继续执行下一个交易。不过这个问题,和今天的分享没关系……

@ATU:今天的主题是怎么发一个智能合约,但是我其实比较关心,您的token怎么解决建材的痛点的

@吉祥:在我最开始发的内容中有

@ATU:我在你的那个主题里面看到,想解决的问题挺多,一个是溯源,一个是建材行业的数字资产,但是我个人认为一个token是完全解决不了溯源问题的。

@吉祥:产品方案:

• 建材尤其是大宗交易,订货,交割问题。

• 智能合约,解决卖家信用

“假一赔十”,基于智能合约,自动进行赔付。用户无法真正信任建材供应商的广告。 基于触发的赔付条件,解决主管判断赔付标准的问题。因为区块链智能合约不能修改的特性,赔付过程将通过锁定在智能合约上的STO代币执行,从而保障了承诺的赔付必定会得到履行。

• 建材二次使用转移问题

○ 共享经济:剩余建材共享,线上商城二次销售。

• 建材溯源

建材商城

@ATU:第二个,我对建材行业不了解这里面也会有积分问题吗

@吉祥:没有积分

@姜信宝老师 BoB :溯源这个问题,已经是一个伪命题了。

@吉祥:个人认为还得分行业去看

@姜信宝老师 BoB :这个不用讨论哈。 区块链解决最大的是信任问题。 所以你的方案里面,信任的层面,可以看看用什么方式解决。其实不是溯源的问题。

@吉祥:嗯,对的

@ATU:STO(Stone Token)的核心目标:

建立一个 去中心化的建材行业可靠规范可信的生态体系,连接每一个建材从业者,消费者可以追溯每一个建材的来源渠道及授权证明、时间等信息 因为看到了这句,随口问一下

@吉祥:嗯,对的,让每个建材从业者 都能获益,像矿工一样

@Kevin:@风静縠纹平  好的,目前已经把gas消耗部分从EVM中去掉了,正在看改版后栈虚拟机和字节码那块有没有问题

@颜颜:吉祥老师今晚的分享很精彩,但时间原因,今晚就结束了哈

多谢吉祥老师今晚精彩的分享,今天先聊到这里,大家可以继续消化一下。讨论的内容会沉淀下来发布在公众号,还有想问的可以在文末留言哦~

下周六晚9点,《众说区块链》不见不散~

本文内容来源于:HiBlock区块链社区微信群讨论

【众说区块链】是HiBlock区块链社区组织的微信群讨论活动,每周六晚9点准时开始,围绕一个主题进行讨论,有兴趣的小伙伴加小助手:baobaotalk_com入群吧~

以下是我们的社区介绍,欢迎各种合作、交流、学习:)

众说区块链:智能合约在建材链上的落地实践相关推荐

  1. android区块链 钱包_区块链研究实验室|从Android调用区块链智能合约

    本教程将展示如何直接从Android开发环境-Android Studio中调用智能合约. 环境要求 我们将使用Tezos区块链.为了使我们的Android java代码与现有的.部署的智能合约交互, ...

  2. 区块链智能合约入门:Hello world(2)

    这次的基础合约Hello world 有所升级,增加了updateMessage,让你可以随时更新自己想说的话. 其实在区块链智能合约入门:Hello world(1)这篇文章里已经介绍过,Hello ...

  3. 区块链 智能合约 简介

    根据谷歌趋势数据显示,目前,程序员对智能合约编程的兴趣已经处于历史最高水平,其中中国高居全球榜首,随着区块链技术的发展,相信日后智能合约将会与我们的生活密切相关,今天就为大家介绍一下什么是智能合约. ...

  4. 智能合约重构社会契约(11)天德区块链智能合约系统

    智能合约是可以运行在区块链上的合约代码,是一种运行在区块链之上的电子协议,它允许在没有第三方的情况下进行可信执行. 1. 设计原则 智能合约数据来源于链上. 智能合约的输人是从区块链的数据库里出来的. ...

  5. 什么是智能合约 区块链_什么是区块链智能合约?

    什么是智能合约 区块链 关于区块链智能合约的第一件事是它们不是智能合约,或者不是区块链上的合约. 实际上,它们的名字是奇异的. 1 ,让我们将按照相反的顺序这些问题,我们应该搞清楚一个聪明的合同实际上 ...

  6. 了区块链开放平台baas_区块链开放平台 BaaS 系统开发,区块链智能合约撰写服务...

    区块链开放平台 BaaS 系统开发,区块链智能合约撰写服务 什么是区块链即服务? 区块链即服务是一种独特的经济模型,允许消费者使用基于云的服务来开发,使用和托管其区块链应用,功能和智能合约.  源中瑞 ...

  7. 区块链智能合约教材出版

    庆祝我们的区块链智能合约教材出版.感谢电子工业出版社的章海涛编辑和合著者华科软件学院的黄立群教授,华科计算机学院黄晓涛教授.购买链接在:https://detail.tmall.com/item.ht ...

  8. [区块链安全-Ethernaut]区块链智能合约安全实战-已完结

    [区块链安全-Ethernaut]区块链智能合约安全实战-已完结 准备 0. Hello Ethernaut 准备工作 创建实例并分析 合约交互 总结 1. Fallback 创建实例并分析 合约交互 ...

  9. 【区块链 | 智能合约】Ethereum源代码(8)- Ethereum服务和以太坊P2P协议发送广播源码分析

    在"[区块链 | 智能合约]Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析"一文中,我们提到Ethereum作为一个service,被Node ...

最新文章

  1. 如何获得瑞星网络安全工程师
  2. 【LeetCode从零单排】No.169 Majority Element(hashmap用法)
  3. 从体验出发构建以增长为目标的视频服务体系
  4. c语言猜拳游戏思考,这是一个猜拳游戏的程序 大家有更好的解决方法么?
  5. matlab predict函数并行,Matalb 智能算法第29个案例运行报错问题
  6. 【爱加密】防止签名破解
  7. 韩寒等50名作家3.15联袂声讨百度侵权
  8. 样本驱动的半自动图像集前背景分割_爱学术—免费下载
  9. 传智播客成都中心官网全新改版
  10. Event Trace for Windows - 事件元数据总览 译(13)
  11. 泛函分析和他的基础概念
  12. 人造金刚石 量子计算机,金刚石并非坚不可摧:科研小组创造首个量子计算机桥...
  13. 关于网盘等图标出现在设备和驱动器的情况
  14. 惠普战66二代 amd 处理器耳机插入后没声音的问题解决
  15. oralce的clob类型数据操作
  16. 互联网大会蓝皮书_世界互联网大会蓝皮书
  17. 任正非接班人李一男离开华为时给属下的忠告
  18. 联发科 AI 智能核心板 - XY6877ZA(MT6877 天玑 900)
  19. 女生英文名字的义意:
  20. matlab 画偏振态,MATLAB:绘制三维偏振光动画

热门文章

  1. java启动提示错误怎么解决方法,java 程序 生成可执行文件exe ,运行出现java exception 错误提示框,解决方法思路...
  2. [武术书籍]醒思录:李小龙的生活智慧(李小龙经典原著书系)
  3. choices参数(数据库字段设计常见)
  4. php获取落地页的信息,信息流广告落地页如何设计?落地页落地页设计注意事项...
  5. 大数据课程有必要学吗?
  6. 〖Web全栈开发①〗—网络编程基础(上)
  7. Android驱动框架整理之KERNEL框架
  8. 专家称华南虎照片有假,华南虎照片真假
  9. 制作一杯热咖啡图片的PS实例教程
  10. GLAD:高斯光束的吸收和自聚焦效应