写点什么

智能合约

  • 2023-08-20
    北京
  • 本文字数:4723 字

    阅读完需:约 15 分钟

智能合约

基础知识

概念

智能合约是一种计算机程序,旨在在特定条件下自动执行、管理或执行合同中的条款和操作。它是区块链技术的重要应用之一,可以用于在分布式网络中执行可编程的、自动化的操作。智能合约可以用来实现多种用途,从数字货币交易到资产管理、供应链追溯和去中心化应用程序。

智能合约的典型应用包括在区块链上发行和管理数字资产(如加密货币代币)、实现去中心化应用程序(如去中心化金融服务、游戏等)以及建立可验证的供应链追溯系统等。智能合约的发展和应用已经在区块链领域产生了深远影响,为多个行业带来了新的商业模式和创新机会。

特点

  1. 自动化执行: 智能合约的一大特点是自动化执行。一旦特定的条件满足,合约中定义的操作将会自动执行,无需人为干预。

  2. 无需信任: 智能合约在区块链上运行,所有参与者都可以查看和验证合约的执行结果,因此不需要对中间人或中央机构的信任。

  3. 不可篡改性: 一旦部署在区块链上,智能合约的代码和执行记录是不可篡改的。这确保了合约的可靠性和安全性。

  4. 可编程性: 智能合约是可编程的,可以使用多种编程语言编写,使其能够执行各种复杂的操作和逻辑。

  5. 多领域应用: 智能合约可以应用于金融、供应链、不动产、投票、游戏等多个领域,为各种场景提供自动化解决方案。

  6. 减少中间环节: 智能合约消除了传统合同执行过程中的中间环节和交易成本,提高了效率并降低了风险。

智能合约、比特币、区块链


区块链

区块链是一种分布式账本技术,用于记录和存储多个交易的链式数据结构。它由一系列区块组成,每个区块包含一些交易信息以及前一个区块的哈希值。区块链的主要特点是去中心化、不可篡改和安全性,它使得交易记录具有可追溯性和透明性。区块链不仅用于加密货币,还用于许多其他领域,如供应链管理、投票系统、数字身份验证等。


比特币:

比特币是第一个成功实现的区块链应用,它是一种加密货币,旨在成为去中心化的数字货币系统。比特币的主要目标是提供一种分布式、不需要中央机构控制的价值交换方法。比特币利用区块链跟踪交易,确保安全性,但不支持完全编程的智能合约。比特币网络中的参与者主要是矿工,他们负责验证和添加新的交易到区块链中,并通过解决复杂的数学问题来保护网络安全。


智能合约:

智能合约是在区块链上自动执行、管理或执行合同中条款和操作的计算机程序。智能合约允许在特定条件下自动执行操作,从而实现更复杂的逻辑和功能。它们可以用于管理资产、处理交易、执行业务逻辑、构建去中心化应用程序等。以太坊是一个支持完整编程的智能合约的区块链平台,它允许开发者创建和部署智能合约。


关系与区别:

  1. 关系: 比特币是区块链的首个应用,它使用区块链技术来创建一种去中心化的数字货币系统。智能合约是区块链技术的进一步应用,允许在区块链上编写和执行自动化的程序。区块链作为底层技术支持比特币和智能合约。

  2. 区别: 比特币是一种数字货币,其主要目的是作为价值交换工具。智能合约是自动化执行的计算机程序,用于执行更复杂的逻辑和操作。区块链是一种数据结构和技术,用于记录和存储交易记录。

总之,智能合约、比特币和区块链在区块链技术领域扮演着不同的角色,分别涵盖了数字货币、自动化合同执行和分布式账本等多个方面。


发展历史

智能合约的概念最早可以追溯到 20 世纪 90 年代早期,但直到区块链技术的出现,它才得以实现和广泛应用。以下是智能合约发展的关键历史阶段:


  1. 早期概念: 智能合约的早期概念可以追溯到 1994 年,由计算机科学家和法学家尼克·萨博提出。他在论文《智能合约》中描述了一种基于电脑协议的自动执行合同的概念。

  2. 比特币的出现: 2009 年,比特币作为第一个成功实现的加密货币问世。虽然比特币区块链没有完全编程的智能合约功能,但它为分布式、去中心化的价值交换奠定了基础。

  3. 以太坊的诞生: 2013 年,以太坊白皮书由维塔利克·布特林提出。以太坊在 2015 年正式上线,它引入了完整编程功能的智能合约,使开发者能够在区块链上构建多功能应用程序。

  4. 智能合约的兴起: 随着以太坊的推出,智能合约逐渐吸引了开发者和企业的关注。2016 年,去中心化自治组织(DAO)的事件引发了人们对智能合约安全性和漏洞的关注,促使以太坊社区进行硬分叉。

  5. 多样化的平台: 随着时间的推移,越来越多的区块链平台开始支持智能合约。例如,EOS、Cardano、Polkadot、Binance Smart Chain 等平台都提供了不同的智能合约开发环境。

  6. 去中心化金融(DeFi)和 NFT 热潮: 在近年来,以太坊的智能合约得到了广泛的应用。去中心化金融(DeFi)生态系统在以太坊上崛起,而非同质化代币(NFT)的热潮也加速了智能合约的发展。

  7. 技术升级: 随着智能合约的广泛应用,一些平台开始解决扩展性、交易速度和费用等问题。以太坊正在进行 Ethereum 2.0 的升级,以提高网络性能。

  8. 不断创新: 智能合约技术仍在不断创新和发展。新的编程语言、标准和工具不断涌现,开发者可以更方便地构建和部署智能合约。

总之,智能合约的发展历程与区块链技术的发展紧密相连。从早期的概念到以太坊的实现,再到不断涌现的新平台和应用领域,智能合约已经成为区块链技术中的重要组成部分。


智能合约平台

智能合约平台是允许开发者创建、部署和执行智能合约的区块链平台。以下是一些主要的智能合约平台,它们提供了不同的功能、编程语言和特点:


  1. 以太坊(Ethereum): 以太坊是最著名的智能合约平台,支持 Solidity (类似于 JavaScript)和 Vyper (Python 风格)等编程语言。它是首个引入完整编程功能的区块链,允许开发者构建各种去中心化应用。

  2. Binance Smart Chain: Binance Smart Chain(BSC)是币安推出的智能合约平台,具有较低的交易费用和快速的交易确认。支持的开发语言:与以太坊兼容,主要使用 Solidity。

  3. Cardano: Cardano 是一个具有分层架构的区块链平台,旨在提供更安全、可扩展和可持续的智能合约支持。支持的开发语言:主要使用 Plutus(基于 Haskell)和 Marlowe(用于金融合约)。

  4. Polkadot: Polkadot 是一个跨链平台,允许不同区块链之间互相通信和共享数据。它支持智能合约的开发和部署。主要使用 Rust。

  5. EOS: EOS 是一个高性能的智能合约平台,支持快速、低成本的智能合约执行。主要使用 C++ 和 WebAssembly。

  6. Tezos: Tezos 是一个自我改进的区块链平台,支持智能合约和治理机制,以确保区块链的进化。主要使用 Michelson。

  7. Avalanche: Avalanche 是一个开放性、可扩展性的区块链平台,支持自定义智能合约的创建和执行。主要使用 Solidity。

  8. Solana: Solana 是一个高性能的区块链平台,支持高吞吐量和低延迟的智能合约执行。主要使用 Rust 和 C。

  9. Algorand: Algorand 是一个高吞吐量、低延迟的区块链平台,支持创新的智能合约和去中心化应用。主要使用 Transaction Execution Approval Language(TEAL)。

  10. Near Protocol :Near Protocol 是一个智能合约平台,旨在为开发者提供构建去中心化应用程序(DApps)和执行智能合约的环境。Near Protocol 使用 Rust 编程语言,并引入了一种名为 "AssemblyScript" 的 WebAssembly(Wasm)编程语言,使开发者能够创建高性能的智能合约和 DApps。


第一个智能合约(hello world)

一切的编程都从第一个 hello world 开始,让我们开始第一个智能合约的 hello world 编写,我们选择 Near Protocol 智能合约平台开始。


hello NEAR

Hello NEAR! 是一个有好的存储问候信息的去中心化应用。这是你能在 NEAR 中创建的最简单的智能合约之一,也是在智能合约中介绍你自己的最佳途径。

开始 Hello NEAR

您有两个选择来启动 Hello NEAR:

  1. 推荐: 通过 Gitpod (一个基于 Web 的交互式环境)使用该应用程序

  2. 通过使用 create-near-app (我们的基于节点的实用工具)在本地启动项目。

GitPod

Hello NEAR 在 gitpod 中可用。当选择一个,一个新的选项卡将打开在您的浏览器与一个基于 Web 的 IDE。给它一分钟来编译和部署协议,然后前端会弹出来让你与应用程序交互(确保弹出窗口没有被阻塞)。

JavaScript

https://gitpod.io/#https://github.com/near-examples/hello-near-js.git

RUST

https://gitpod.io/#https://github.com/near-examples/hello-near-rust.git

Create Near App (node)

Hello NEAR 可以在 create-NEAR-app 的帮助下在本地创建。

npx create-near-app@latest
复制代码

然后按照屏幕上的指示操作。

与 Hello NEAR 交互

请使用您的 NEAR 帐户登录。如果你没有,你将能够在此刻创建一个。一旦登录,改变问候,看看我们的 Hello NEAR 应用程序如何问候您!




去中心化应用架构

现在您已经了解了 dApp 的功能,让我们进一步了解一下它的结构:

  1. 前端代码位于/frontend 文件夹中。

  2. 智能合同代码位于/contract 文件夹中。

Constract

该契约提供了两种方法: set _ looking 和 get _ looking。第一个在契约的参数问候语中存储一个字符串,而第二个检索它。默认情况下,协议返回消息“ Hello”。

#[near_bindgen]impl Contract {    // Public: Returns the stored greeting, defaulting to 'Hello'    pub fn get_greeting(&self) -> String {        return self.greeting.clone();    }
// Public: Takes a greeting, such as 'howdy', and records it pub fn set_greeting(&mut self, greeting: String) { // Record a log permanently to the blockchain! log!("Saving greeting {}", greeting); self.greeting = greeting; }}
复制代码

https://github.com/near-examples/hello-near-rs/blob/main/contract/src/lib.rs#L23-L36#

前端

前端由一个 HTML 文件(/index.HTML)组成。该网站的逻辑位于/asset/js/index.js 中,它通过/near-interface 与合同进行通信。JS.您将在/asset/js/index.js 中注意到以下代码:

// Setup on page loadwindow.onload = async () => {  let isSignedIn = await wallet.startUp();
if (isSignedIn) { signedInFlow(); } else { signedOutFlow(); }
fetchGreeting();};
复制代码

它指示我们的应用程序在启动时检查用户是否已经登录并执行 signedInFlow ()或 signedOutFlow ()。

测试

在编写智能契约时,测试所有方法非常重要。在这个项目中,有两种类型的测试: 单元测试和集成测试。在深入研究它们之前,继续并通过命令行执行 dApp 中提供的测试。

单元测试

单元测试检查智能合约中的单个函数。

contract/src/lib.rs

#[test]fn get_default_greeting() {    let contract = Contract::default();    // this test did not call set_greeting so should return the default "Hello" greeting    assert_eq!(contract.get_greeting(), "Hello".to_string());}
#[test]fn set_then_get_greeting() { let mut contract = Contract::default(); contract.set_greeting("howdy".to_string()); assert_eq!(contract.get_greeting(), "howdy".to_string());}
复制代码
集成测试

集成测试通常是用 javascript 编写的。它们会自动部署您的契约并在其上执行方法。通过这种方式,集成测试在一个真实的场景中模拟来自用户的交互。您将在 Integration-test/中找到 hello-near 的集成测试。

integration-tests/src/main.ava.ts

test('returns the default greeting', async (t) => {  const { contract } = t.context.accounts;  const greeting: string = await contract.view('get_greeting', {});  t.is(greeting, 'Hello');});
test('changes the greeting', async (t) => { const { root, contract } = t.context.accounts; await root.call(contract, 'set_greeting', { greeting: 'Howdy' }); const greeting: string = await contract.view('get_greeting', {}); t.is(greeting, 'Howdy');});
复制代码


以下示例来源 near 官网,https://docs.near.org/zh-CN/tutorials/examples/hello-near


用户头像

还未添加个人签名 2019-07-02 加入

还未添加个人简介

评论

发布
暂无评论
智能合约_麦田的守望者_InfoQ写作社区