区块链智能合约

区块链智能合约

以太坊合约类型

  1. ERC-20: 这是最初的代币标准,用于创建可替代的代币。这些代币在功能上相似,每个代币都是完全相同且不可区分的。

  2. ERC-721: 用于创建非替代性代币(NFTs),使得每个代币都是唯一的,可以代表不同的资产,如艺术品、收藏品等。

  3. ERC-1155: 结合了ERC-20和ERC-721的特点,允许一个合约包含可替代和非替代的代币。这种多代币标准为游戏和应用提供了极大的灵活性。

  4. ERC-777: 作为ERC-20的后续者,引入了一些新的特性,如钩子函数,允许代币合约在转账和接收时执行额外的逻辑。它旨在提高交易的安全性和操作的灵活性。

  5. ERC-223: 类似于ERC-20,但增加了避免代币意外丢失的机制。在代币转移到合约时,如果合约不支持代币接收,转账将失败并撤销。

  6. ERC-827: 对ERC-20进行了扩展,增加了在转账时调用另一个合约的能力。这使得代币可以在转账的同时执行更复杂的操作。

  7. ERC-998: 一个复合代币标准,允许非替代性代币(NFTs)拥有其他ERC-20或ERC-721代币。这适用于需要表达所有权层次结构的场景。

  8. ERC-1400: 是一个安全代币标准,旨在增加金融市场的合规性。它引入了分区,以及其他特性,以支持更复杂的资产管理要求。

开源保险公司保单上链ERC-721智能合约

gitee地址 https://gitee.com/lang_junnan_admin/insurance-contract

基于以太坊编写一个erc20智能合约-入门案例

一、准备工作

发布一个智能合约到区块链上是需要一定的gas费用的,就是手续费,所以我们首先需要创建一个钱包,我们可以在谷歌浏览器中安装一个小插件,叫MetaMask 小狐狸如下图,然后创建一个账号

 二、编写合约代码

pragma solidity ^0.4.16;

contract TokenERC20 {
    string public name;  // 代币名称
    string public symbol;  // 代币符号
    uint8 public decimals = 18;  // 18 是建议的默认值
    uint256 public totalSupply;  // 总供应量

    mapping (address => uint256) public balanceOf;  // 每个地址的余额
    mapping (address => mapping (address => uint256)) public allowance;  // 每个地址授权给其他地址的额度

    event Transfer(address indexed from, address indexed to, uint256 value);  // 转账事件

    event Burn(address indexed from, uint256 value);  // 销毁事件

    // 构造函数,初始化代币信息和总供应量
    function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public {
        totalSupply = initialSupply * 10 ** uint256(decimals);
        balanceOf[msg.sender] = totalSupply;
        name = tokenName;
        symbol = tokenSymbol;
    }

    // 内部转账函数
    function _transfer(address _from, address _to, uint _value) internal {
        require(_to != 0x0);
        require(balanceOf[_from] >= _value);
        require(balanceOf[_to] + _value > balanceOf[_to]);
        uint previousBalances = balanceOf[_from] + balanceOf[_to];
        balanceOf[_from] -= _value;
        balanceOf[_to] += _value;
        Transfer(_from, _to, _value);
        assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
    }

    // 转账函数
    function transfer(address _to, uint256 _value) public returns (bool) {
        _transfer(msg.sender, _to, _value);
        return true;
    }

    // 从授权账户转账函数
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        require(_value <= allowance[_from][msg.sender]);  // 检查授权额度
        allowance[_from][msg.sender] -= _value;
        _transfer(_from, _to, _value);
        return true;
    }

    // 授权额度函数
    function approve(address _spender, uint256 _value) public returns (bool success) {
        allowance[msg.sender][_spender] = _value;
        return true;
    }

    // 销毁代币函数
    function burn(uint256 _value) public returns (bool success) {
        require(balanceOf[msg.sender] >= _value);
        balanceOf[msg.sender] -= _value;
        totalSupply -= _value;
        Burn(msg.sender, _value);
        return true;
    }

    // 从授权账户销毁代币函数
    function burnFrom(address _from, uint256 _value) public returns (bool success) {
        require(balanceOf[_from] >= _value);
        require(_value <= allowance[_from][msg.sender]);
        balanceOf[_from] -= _value;
        allowance[_from][msg.sender] -= _value;
        totalSupply -= _value;
        Burn(_from, _value);
        return true;
    }
}

三、部署合约

// 1. 导入所需库
const Web3 = require('web3');
const HDWalletProvider = require('@truffle/hdwallet-provider');
const TokenERC20 = artifacts.require("TokenERC20");

// 2. 配置网络提供者
const provider = new HDWalletProvider({
    mnemonic: "<YOUR_METAMASK_MNEMONIC>",
    providerOrUrl: "<YOUR_INFURA_ENDPOINT>"
});
const web3 = new Web3(provider);

// 3. 部署合约
module.exports = function(deployer) {
  deployer.deploy(TokenERC20, 1000000, 'TokenName', 'TKN');
};

结论:

需要替换 <YOUR_METAMASK_MNEMONIC><YOUR_INFURA_ENDPOINT> 分别为你的 Metamask 助记词和 Infura 节点的端点。然后,你可以使用 Truffle 框架的命令行工具来执行这个部署脚本,从而部署合约到以太坊网络中。

部署智能合约需要一定的 GAS 费用,最好是能给你的账号充点钱,你需要确保你的以太坊钱包中有足够的 ETH 用于支付 GAS 费用。部署完成后,你就可以在以太坊网络上使用这个合约了。

posted @ 2023-02-22 23:23  郎小乐  阅读(31)  评论(0编辑  收藏  举报