【云小课】应用平台第24课 区块链关键技术之一:智能合约
其实智能合约并不是区块链首创出来的概念,是由 Nick Szabo 在 20 世纪 90 年代提出的,其定义为“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议”。简单来说,智能合约就是一段写在区块链上带有触发条件的代码,一旦某个事件触发合约中的条款,代码即自动执行。也就是说,满足条件就执行,不需要人为操控。
举个简单的例子,例如自动售货机,当你选择商品并付钱后,售货机就会自动吐出你购买的商品。
区块链为什么需要智能合约
区块链还未使用智能合约之前,比较典型的就是加密数字货币,应用简单,表达能力有限,也无法在比特币系统开发其他应用,比如存证、股权众筹等。为了解决该问题,区块链引入智能合约,支持用户自定义业务逻辑,从而使区块链的应用范围从单一的货币领域扩大到涉及合约共识的其他金融领域,最典型的代表是以太坊。
智能合约是“执行合约条款的计算机交易协议”,被认为是第二代区块链的技术核心,它是区块链从虚拟货币、金融交易协议到通用工具发展的必然结果。
在传统的合同制订中,参与双方通过选择信任的人和机构作为第三方,而智能合约则从许多经济交易中,减少了对第三方信任的必要。智能合约是一段涉及资产与交易的代码,只有将它放到区块链上,才能有效防止“盗版”和“篡改”。当区块链上的智能合约满足触发条件后,智能合约即会根据预设逻辑自我执行,读取相应数据并进行计算,最后将计算结果永久保存在链式结构中。
智能合约的优缺点
智能合约最大的优势是利用程序算法替代人为仲裁和执行合同,一旦某个事件触发合约中的条款,代码就会自动执行。
基于区块链特点,智能合约的运行结果是可信的,其结果是无法被伪造和篡改的,因此区块链使用智能合约后优势如下:
各行各业也可以从智能合约发展中受益,例如选举、供应链和电子商务等,智能合约也会在更多的领域发挥越来越大的作用。
但是在实际应用中,智能合约的发展也会存在一些现实的阻碍,例如代码错误、缺乏法律监管等。
智能合约在华为云的应用
随着智能合约的普及,智能合约已经在各种区块链网络中得以实施,从联盟链领域最热门的区块链引擎Hyperledger Fabric,到华为自主研发的华为链引擎,都无一例外地提供了智能合约能力,供用户在链上组织各自的业务逻辑。
在使用华为云区块链服务BCS时,用户需要开发自己的智能合约。智能合约是运行在区块链上的、特定条件下自动执行的代码逻辑,是用户利用区块链实现业务逻辑的重要途径。
-
使用Hyperledger Fabric增强版时,支持使用Go语言或Java语言开发智能合约。
-
Go语言开发智能合约,请戳这里了解。
Fabric架构版本的区块链服务1.4风格Go语言的合约结构如下:
package main
// 引入必要的包
import (
"github.com/hyperledger/fabric/core/chaincode/shim"
pb "github.com/hyperledger/fabric/protos/peer"
)
// 声明一个结构体
type SimpleChaincode struct {}
// 为结构体添加Init方法
func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response {
// 在该方法中实现链代码初始化或升级时的处理逻辑
// 编写时可灵活使用stub中的API
}
// 为结构体添加Invoke方法
func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
// 在该方法中实现链代码运行中被调用或查询时的处理逻辑
// 编写时可灵活使用stub中的API
}
//主函数,需要调用shim.Start()方法
func main() {
err := shim.Start(new(SimpleChaincode))
if err != nil {
fmt.Printf("Error starting Simple chaincode: %s", err)
}
}
-
Java语言开发智能合约,合约结构如下,请戳这里了解。
package main
// 引入必要的包,系统自动操作,只要在maven或gradle中配置
import org.hyperledger.fabric.shim.ChaincodeBase;
import org.hyperledger.fabric.shim.ChaincodeStub;
public class SimpleChaincodeSimple extends ChaincodeBase {
@Override
public Response init(ChaincodeStub stub) {
// 在该方法中实现链代码初始化或升级时的处理逻辑
// 编写时可灵活使用stub中的API
}
@Override
public Response invoke(ChaincodeStub stub) {
// 在该方法中实现链代码运行中被调用或查询时的处理逻辑
// 编写时可灵活使用stub中的API
}
//主函数,需要调用shim.Start()方法
public static void main(String[] args) {
new SimpleChaincode().start(args);
}
}
-
-
使用华为链服务,支持Go语言智能合约,合约结构如下,请戳这里了解。
package usercontract
// 引入必要的包
import (
"git.huawei.cn/poissonsearch/wienerchain/contract/docker-container/contract-go/contractapi"
)
// 声明一个结构体
type SimpleChaincode struct {}
// 为结构体添加Init方法
func (t *SimpleChaincode) Init(stub contractapi.ContractStub) ([]byte, error) {
// 在该方法中实现合约初始化或升级时的处理逻辑
// 编写时可灵活使用stub中的API
}
// 为结构体添加Invoke方法
func (t *SimpleChaincode) Invoke(stub contractapi.ContractStub) ([]byte, error) {
// 在该方法中实现合约运行中被调用或查询时的处理逻辑
// 编写时可灵活使用stub中的API
}
// NewSmartContract主函数
func NewSmartContract() contractapi.Contract {
return &SimpleChaincode {}
}
下期预告
听了区块链智能合约的介绍,是不是觉得很神奇呢。下期小编继续带着大家一起学习探讨:如何创建Hyperledger Fabric增强版,敬请期待,记得关注哦~~
【后续】更多区块链知识等你来解锁哦~~
- 点赞
- 收藏
- 关注作者
评论(0)