native smart contracts, a easy forgotten thing.

本文介绍了区块链中的内置智能合约,如以太坊的ERC-20合约示例,其定义了基础代币功能;对比了比特币的比特币脚本,虽然功能有限但专用于处理简单交易。
摘要由CSDN通过智能技术生成

"内置的智能合约"是指在区块链网络中预先存在的智能合约。这些合约通常由区块链的开发者编写,并在区块链网络创建时就已经部署。这些合约的功能通常包括处理基本的交易和账户管理等核心功能。

以太坊网络就有一种内置的智能合约,叫做 ERC-20 合约1。ERC-20 是一种代币标准,定义了一套接口,任何遵循这个标准的智能合约都可以在以太坊网络上作为代币使用1。以下是一个 ERC-20 合约的简单示例1

pragma solidity ^0.8.7;

contract ERC20Basic {
    string public constant name = "BasicToken";
    string public constant symbol = "BAS";
    uint8 public constant decimals = 18;
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
    event Transfer(address indexed from, address indexed to, uint tokens);
    mapping(address => uint256) balances;
    mapping(address => mapping (address => uint256)) allowed;
    uint256 totalSupply_;

    constructor(uint256 total) {
        totalSupply_ = total;
        balances[msg.sender] = totalSupply_;
    }

    function totalSupply() public view returns (uint256) {
        return totalSupply_;
    }

    function balanceOf(address tokenOwner) public view returns (uint) {
        return balances[tokenOwner];
    }

    function transfer(address receiver, uint numTokens) public returns (bool) {
        require(numTokens <= balances[msg.sender]);
        balances[msg.sender] = balances[msg.sender] - numTokens;
        balances[receiver] = balances[receiver] + numTokens;
        emit Transfer(msg.sender, receiver, numTokens);
        return true;
    }

    function approve(address delegate, uint numTokens) public returns (bool) {
        allowed[msg.sender][delegate] = numTokens;
        emit Approval(msg.sender, delegate, numTokens);
        return true;
    }

    function allowance(address owner, address delegate) public view returns (uint) {
        return allowed[owner][delegate];
    }

    function transferFrom(address owner, address buyer, uint numTokens) public returns (bool) {
        require(numTokens <= balances[owner]);
        require(numTokens <= allowed[owner][msg.sender]);

        balances[owner] = balances[owner] - numTokens;
        allowed[owner][msg.sender] = allowed[owner][msg.sender] - numTokens;
        balances[buyer] = balances[buyer] + numTokens;
        emit Transfer(owner, buyer, numTokens);
        return true;
    }
}

这个合约定义了一种基础的 ERC-20 代币,包括了代币的名称、符号、小数位数,以及一些基本的函数,如转账(transfer)、批准(approve)和从其他地址转账(transferFrom)等

比特币(Bitcoin)的设计并没有像以太坊那样包含一个用于编写复杂智能合约的编程语言。然而,比特币确实有一种被称为比特币脚本(Bitcoin Script)的内置脚本语言1。这是一种堆栈式的、不完全图灵完备的语言,主要用于处理交易的输入和输出1

以下是一个比特币脚本的例子,这是一个最常见的支付到比特币地址(Pay-to-Public-Key-Hash,P2PKH)的脚本1

OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

这个脚本的工作原理如下1

  • OP_DUP:复制栈顶的元素。
  • OP_HASH160:弹出栈顶的元素,计算它的 RIPEMD160(SHA256()) 哈希,然后将结果压入栈顶。
  • <pubKeyHash>:这是公钥哈希,它被压入栈顶。
  • OP_EQUALVERIFY:弹出栈顶的两个元素,检查它们是否相等。如果不等,脚本执行失败。如果相等,脚本继续执行。
  • OP_CHECKSIG:弹出栈顶的两个元素,检查签名是否有效。如果有效,将 true 压入栈顶。否则,将 false 压入栈顶。

然而,比特币脚本的功能相对有限,不能像以太坊的 Solidity 那样编写复杂的逻辑1。因此,比特币主要用于处理简单的交易,而不是复杂的智能合约1

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值