第146篇 笔记-智能合约介绍

定义:当满足某些预定义条件时,智能合约是一种在区块链网络上运行的防篡改程序。

1.什么是智能合约

智能合约是在区块链网络上托管和执行的计算机程序。每个智能合约都包含指定预定条件的代码,这些条件在满足时会触发并产生结果。通过在去中心化区块链而不是集中化服务器上运行,智能合约允许多方以准确、及时和防篡改的方式达成共享结果。‍

智能合约是一种强大的自动执行的基础设施,因为它们不受中央管理员的控制,不易受到恶意实体的单点攻击。当应用于多方数字协议时,智能合约应用程序可以降低交易对手风险、提高效率、降低成本,并为流程提供新的透明度。

2.智能合约的历史

智能合约最早由美国计算机科学家尼克·沙博(Nick Szabo)于1994年创造,他给出了一个广义的智能合约定义如下:“执行合约条款的计算机化交易协议”,其总体目标是“满足共同的合约条件,最小化恶意和意外,并最小化对可信中介的需求。”

虽然智能合约的一般概念可以在自动售货机等系统中看到,但区块链形成了数字、防篡改和无许可的智能合约的基础。2009年比特币区块链的引入支持了第一个协议智能合约,该合约建立了一组必须满足的条件,才能在网络上的用户之间传输比特币。这些条件包括用户使用与其公共地址匹配的正确私钥(类似于链接到特定帐户的密码)签署交易,以及用户拥有足够的资金来支付交易。

2012年,比特币区块链演变为提供另一种主要类型的智能合约,称为多签名交易。多重签名交易需要定义一定数量的人(公钥)使用其私钥签署交易,然后才被认为有效。这通过减少单点故障(如被盗或丢失的私钥)来提高用户资金的安全性。

一个用于比特币区块链上多签名交易的简单框架,需要3个私钥中的2个签署才能使交易被视为有效

在接下来的几年中,区块链开始尝试添加新的编程条件(称为操作码)。然而,2013年Vitalik Buterin发布了以太坊白皮书,这是智能合约的下一个重大飞跃。2015年,以太坊作为可编程智能合约的新型区块链推出。以太坊智能合约区块链提供了一台可以同时运行多个独立智能合约的“世界计算机”,而不是将区块链作为单个智能合约应用程序或提供一些有限的操作码。

3.智能合约工作原理

智能合约是区块链上的防篡改程序,具有以下逻辑:“如果/当x事件发生时,执行y操作。”一个智能合约可以有多个不同的条件,一个应用程序可以有多种不同的智能合约,以支持一组相互连接的流程。还有多种用于编程的智能合约语言,以太坊的Solidity是最受欢迎的。‍

任何开发者都可以创建一个智能合约,并将其部署在公共区块链上,用于他们自己的目的,例如,一个个人收益聚合器,自动将他们的资金转移到最高收益的应用程序。然而,许多智能合约涉及多个独立方,这些独立方可能相互了解,也可能不相互信任。智能合约准确定义了用户如何与之交互,包括谁可以与智能合约交互,在什么时间,什么输入导致什么输出。其结果是多方数字协议从今天的概率状态发展到新的确定性状态,在这种状态下,它们可能会按照期望执行,在这种新的确定性状态下,保证它们能够根据代码执行。

4.智能合约示例

智能合约的一个目的是在不同的实体组之间自动化特定的业务流程。这些实体共同就所有智能合约的条款达成一致,如支付、流程和争议解决。一个简单的全球贸易智能合约示例可能包含以下条款:

  • 条款1:如果货物按时到达,则零售商向供应商全额付款。
  • 条款2:如果货物迟到一天,那么零售商应向供应商支付全额的98%。

其他智能合约支持公共去中心化应用程序(dApp),任何人都可以在不需要任何权限的情况下与之交互。公共dApps通常是开源的,因此世界上的任何人都可以在决定是否与它们交互之前检查它们的功能。公共dApp的一个例子是去中心化借贷市场,它可能有以下术语:

  • 条款1:如果用户将抵押品存入特定的智能合约,他们可以获得高达抵押品价值50%的贷款(即,100美元的存款可以借入高达50美元的贷款)。
  • 条款2:如果用户的抵押比率(抵押物/未偿贷款价值)低于200%,则用户的抵押物将自动清算并转移给贷款人,以确保他们不会亏损。
  • 条款3:贷款人可以将资金存入特定的合同中,其他用户可以按照预定义的抵押比率从该合同中借款,同时贷款人可以获得部分利率付款。

5.智能合约的好处

大多数传统的数字协议都涉及彼此不认识的双方,这会带来其中一方不履行承诺的风险。为了解决交易对手风险,数字协议通常由大型集中机构(如银行)托管和执行,这些机构可以执行合同条款。这些数字合同可以直接在用户和大公司之间进行,也可以让大公司充当两个用户之间的可信中介。尽管这种动态允许许多合同存在,否则这些合同不会承担此类风险,但它也造成了一种情况,即较大的中央集权机构对合同施加不对称的影响。

通过区块链支付与银行系统支付时用户资金处理方式的差异

智能合约在数字协议的基础上提供了一些优势。

  • 安全性——在去中心化区块链基础设施上运行合约,确保没有攻击的中心故障点,没有可贿赂的中央中介,也没有任何一方或中央管理员用来篡改结果的机制。
  • 可靠性–通过分散的节点网络冗余处理和验证合约逻辑,提供了强大的防篡改、正常运行时间和正确性,保证合约将根据其条款按时执行。
  • 公平——使用去中心化网络托管和执行协议条款,降低了营利性中间商利用其特权地位进行寻租和虹吸价值的能力。
  • 效率–自动化协议托管、维护、执行和/或结算的后端流程意味着任何一方都不必等待手动数据输入、交易对手履行其义务或中间人处理交易。

6.智能合约用例

1.权限管理(令牌)

代币智能合约用于创建、跟踪和分配区块链网络上存在的特定数字代币的所有权。代币合约将功能编程到其发行的代币中,为持有者提供dApp(效用代币)中的效用/保险、协议中的投票权(治理代币)、公司股权(安全代币)、对唯一真实世界或数字资产的所有权主张(不可替代代币)等功能。例如,FIL代币用于支付Filecoin的去中心化存储服务,COMP代币允许用户参与Compound协议的治理。

2.金融产品(DeFi)

去中心化金融(DeFi)由应用程序组成,这些应用程序使用智能合约重新创建传统金融产品和服务,如货币市场、期权、稳定币、交易所和资产管理,以及通过无许可组合组合多种服务来创建新的金融原语。智能合约可以将用户的资金托管,并根据预定义的条件在用户之间分配。例如,BarnBridge使用智能合约为希望固定资产暴露于价格对(例如,45%代币a,55%代币B)的用户自动化交易,Aave使用智能合约以无许可和分散的方式促进借贷。

通过使用资产价格来确定用户的借款借款人,并查看贷款是否未充分抵押和是否需要清算,从而支持分散的贷款市场

3.游戏和NFT

基于区块链的游戏使用智能合约来防止游戏内动作的执行。一个例子是PoolTogether,这是一个无损失的储蓄游戏,用户将他们的资金存入一个共享池,然后将其转入货币市场,在那里赚取利息。在预定义的时间段后,游戏结束,获胜者将随机获得所有应计利息,而其他人可以提取他们的原始存款。类似地,限量版NFT可以有公平的分配模型,RPG可以使用随机性支持不可预测的战利品掉落,有助于确保所有用户都有机会获得稀有的数字资产。许多项目使用Chainlink可验证随机函数(VRF)访问随机性,这是一种随机数生成器(RNG),使用密码学来证明其不可篡改,这意味着RNG过程是可公开审核的。

7.智能合约限制

智能合约的一个固有限制是,它们运行的底层区块链是孤立的网络,这意味着区块链没有与外部世界的内置连接。没有外部连接,智能合约无法与外部系统通信以确认真实世界事件的发生,也无法访问成本高效的计算资源。与没有互联网的计算机类似,如果没有真实世界的连接,智能合约是极其有限的。例如,他们无法在执行交易前了解资产的价格,无法在支付作物保险索赔前检查月平均降雨量,也无法在与供应商结算前核实货物是否已到达。‍

因此,区块链行业正在进行的主要演变是可编程智能合约,它与区块链之外的真实世界数据和传统系统连接,扩展了智能合约逻辑中使用的输入和输出。这些混合智能合约使用称为oracle的安全中间件,将链上代码与链下基础设施相结合,例如,使用外部数据触发智能合约,或在传统支付轨道上结算链下合同。

Oracle将输入和输出连接到区块链,以创建混合智能合约

与互联网对计算机的影响类似,oracles是将新兴区块链网络与当今系统连接起来的关键,以实现互连、高效和隐私保护的智能合约,从而保持底层区块链网络的安全性和可靠性。通过启用混合智能合约,oracles极大地扩展和增强了区块链的宝贵属性,从而在更多行业和用例中基于加密真实性达成了卓越的数字协议。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
智能合约是一种在区块链执行的自动化合约。Python是一种常用的编程语言,也可以用于编写智能合约。在Python中,可以使用一些库来编写智能合约,例如Web3.py和Solidity.py。下面是一个使用Web3.py库编写智能合约的示例: ```python from web3 import Web3 # 连接到以太坊节点 w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/your-infura-project-id')) # 加载智能合约ABI contract_abi = [ { "constant": False, "inputs": [ { "name": "x", "type": "uint256" } ], "name": "set", "outputs": [], "payable": False, "stateMutability": "nonpayable", "type": "function" }, { "constant": True, "inputs": [], "name": "get", "outputs": [ { "name": "", "type": "uint256" } ], "payable": False, "stateMutability": "view", "type": "function" } ] # 部署智能合约 contract_address = '0x1234567890abcdef1234567890abcdef12345678' contract = w3.eth.contract(address=contract_address, abi=contract_abi) # 调用智能合约方法 transaction = contract.functions.set(42).buildTransaction({ 'from': w3.eth.accounts[0], 'gas': 100000, 'gasPrice': w3.toWei('1', 'gwei'), 'nonce': w3.eth.getTransactionCount(w3.eth.accounts[0]) }) signed_transaction = w3.eth.account.signTransaction(transaction, private_key='your-private-key') transaction_hash = w3.eth.sendRawTransaction(signed_transaction.rawTransaction) transaction_receipt = w3.eth.waitForTransactionReceipt(transaction_hash) # 获取智能合约状态 result = contract.functions.get().call() print("智能合约状态:", result) ``` 请注意,上述示例中的合约ABI和地址是虚构的,您需要根据您自己的合约来替换它们。此外,您还需要替换连接到以太坊节点的URL和私钥。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wonderBlock

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值