精华内容
下载资源
问答
  • Erc20Tokens数据集包含超过1000种主流的以太坊ERC20代币的描述数据清单和图标,可用于钱包等区块链应用的开发,支持使用Java、Python、Php、NodeJs、C#等各种开发语言查询主流ERC20代币的相关数据。下载链接:ERC20...

    Erc20Tokens数据集包含超过1000种主流的以太坊ERC20代币的描述数据清单和图标,可用于钱包等区块链应用的开发,支持使用Java、Python、Php、NodeJs、C#等各种开发语言查询主流ERC20代币的相关数据。下载链接:

    ERC20代币数据集 - 汇智网​sc.hubwiz.com
    554cdd0755dc5bdf9d51193201bc159a.png

    1、数据集概述

    以下是ERC20代币数据集中部分代币的图标示意:

    fed69023c6f443bf61da87913919c3f0.png

    Erc20Tokens数据集的的当前版本为1.0.0,主要文件清单参见:http://sc.hubwiz.com/codebag/erc20-tokens-dataset/

    2、数据集结构说明

    数据集的主文件为erc20-tokens.json,其中的每个ERC20代币都包含以下描述信息:

    • name:代币名称,例如:Dai
    • symbol:代币符号,例如:DAI
    • address:代币部署地址,例如:0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359

    例如erc20-tokens.json文件中Dai和Peerguess代币的数据:

    [
      {
        "name": "Dai"
        "symbol": "dai", 
        "address": "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", 
      }
      ...
      {
        "name": "Peerguess"
        "symbol": "guess", 
        "address": "0xbdcfbf5c4d91abc0bc9709c7286d00063c0e6f22", 
      }
      ...
    ]

    ERC20代币的图标保存在icons目录下,文件名为代币的符号。例如:

    erc20-token-dataset
      |- icons
           |- dai.png              # Dai代币的图标
           |- guess.png            # Peerguess代币的图标
           |- ...

    3、在程序中使用数据集

    可以使用Java、Python、PHP、C#、JavaScript等常见开发语言读取数据集。

    下面的代码使用Php显示数据集中所有ERC20代币的合约部署地址:

    <?php
    $tokens = json_decode(file_get_contents('../tokens.json'));
    foreach($tokens as $token){
      echo $token->symbol . ' : ' . $token->address . PHP_EOL;
    }
    

    下面的代码使用NodeJS显示数据集中所有ERC20代币的合约部署地址:

    const tokens = require('../tokens.json')
    tokens.forEach(token => console.log(`${token.symbol} : ${token.address}`))

    下面的代码使用Python显示数据集中所有ERC20代币的合约部署地址:

    import json
    with open('./tokens.json','r') as f:
      tokens = json.load(f)
    for token in tokens:
      print(token['symbol'],' : ',token['address'])

    4、数据来源

    本数据集由汇智网基于互联网及区块链上的公开数据整理,如需定制请咨询 技术支持QQ。

    展开全文
  • 一个基于对数ERC20令牌的简单以太坊钱包。 轻松安全地发送以太坊(ETH)和对数令牌(LGR)。 以太坊钱包被解密,原始交易在本地签名。 原始交易直接发送到EtherScan.io。 钱包私钥保存在本地计算机上,每次要使用此...
  • PHP以太坊钱包开发示例包,使用fastadmin框架编写,php配置>=7.0,需安装scrypt扩展,代码中包括离线生成钱包地址,生成keystore文件,eth转账,erc20转账,eth交易记录日志监听和erc20交易记录日志监听示例代码,...
  • SmartWallet.JS 开发包适用于平台方使用JavaScript高效完成对用户地址上的Ether/ERC20代币的归集工作,无需向用户地址注入Ether即可完成Ether/ERC20代币的归集。官方下载地址:SmartWallet.JS1、开发包概述...

    SmartWallet.JS 开发包适用于平台方使用JavaScript高效完成对用户地址上的Ether/ERC20代币的归集工作,无需向用户地址注入Ether即可完成Ether/ERC20代币的归集。官方下载地址:SmartWallet.JS

    1、开发包概述

    SmartWallet.JS开发包的主要特点如下:

    • 真正的平台型非托管钱包,平台无需管理大量用户地址的密钥并且没有安全性的损失
    • 无需向用户地址注入Ether即可完成以太币/ERC20代币的归集,流程更简单,效率更高
    • 支持在单一交易内完成多个用户地址的归集

    SmartWallet.JS开发包的主要代码文件清单见官网说明:以太坊智能钱包JS开发包 - 汇智网

    2、使用示例代码

    2.1 部署工厂合约

    SmartWallet.JS开发包利用工厂合约 SmartWalletFacotry 管理用户地址的生成与归集。因此首先需要部署工厂合约。

    进入项目目录,执行如下命令在本地测试节点部署工厂合约和用于演示的HappyToken合约:

    ~$ cd smartwallet
    ~/smartwallet$ npm run deploy-dev

    运行结果如下:

    d761666e4e34d1f1edfa4a5fb50f5ad7.png

    类似的,使用如下命令在主网部署工厂合约:

    ~/smartwallet$ npm run deploy-mainnet
    注意:主网部署前,需要修改config.js文件中的账号和节点配置。

    2.2 生成用户地址

    示例代码demo/generate-user-address.js展示了如何利用SmartWallet.JS开发包为用户生成平台地址。

    进入demo目录,执行如下命令为三个指定ID的用户生成平台地址:

    ~/smartwallet/demo$ node generate-user-wallet.js

    运行结果如下:

    dfc48f03cb50b1251014388f8b1b89d7.png

    注:生成用户地址不需要任何手续费。

    2.3 用户充值

    示例代码demo/fund-user-address.js模拟了用户向平台地址的充值行为。

    执行如下命令向三个指定ID的用户地址充入Ether和HappyToken:

    ~/smartwallet/demo$ node fund-user-wallet.js

    运行结果如下:

    a5584a8cdcc0da8dc0797450d33f342b.png

    2.4 查看用户地址余额

    示例代码demo/get-user-balance.js展示了如何查询用户地址的Ether/ERC20代币余额。

    执行如下命令查询三个指定ID用户的余额信息:

    ~/smartwallet/demo$ node get-user-balance.js

    运行结果如下:

    b2bb51b12ed69838f2539783e3ce4ff2.png

    2.5 归集用户地址余额

    示例代码demo/sweep-user-address.js展示了如何利用归集用户地址上的以太币和ERC20代币到指定的地址。

    执行如下命令将三个指定ID用户的余额归集到指定冷钱包:

    ~/smartwallet/demo$ node sweep-user-wallet.js

    运行结果如下:

    7b2237e2d242ffbefc44302e9463450d.png

    3、Kit类的使用方法

    3.1 实例化Kit

    Kit是SmartWallet开发包的入口类,实例化时需要传入以太坊节点URL、交易账号的私钥以及工厂合约地址。例如:

    const { Kit } = require('smartwallet')
    
    const kit = new Kit(
      'http://localhost:8545',                                  // 以太坊节点URL
      '0x4f3edf983ac636a6......7d21715b23b1d'                   // 账号私钥
      '0xFA64858C14345C0a3aD805E0da64900C4d7ec5e6'              // 工厂合约地址                    
    );

    3.2 生成用户地址

    使用Kit对象的getUserWallet()方法为指定的用户生成平台地址,例如:

    const userId = 'u010203';                                         // 用户的平台ID
    const userAddress = await kit.getUserWallet(userId);              // 返回用户地址
    console.log(`user address => ${userWallet}`);                     // 显示用户地址

    3.3 归集单个用户地址余额

    使用Kit对象的sweepUserWallet()方法归集指定用户地址的以太币/ERC20代币余额。例如:

    const ret = await kit.sweepUserWallet(
      'u010203',                                                 // 用户的平台ID  
      ['0xc21dc5A1b919088F308e0b02243Aaf64c060Dbd0'],            // 要归集的代币地址集
      '0x13b2fe2754f40555cbcbd6302da39fda21d5fec1'               // 接收地址
    );                      
    console.log(`sweep txid => ${ret.tx}`);                      // 显示归集交易ID

    3.4 批量归集用户地址余额

    使用Kit对象的sweepUserWallets()方法归集一组用户地址的以太币/ERC20代币余额。例如:

    txid = await kit.sweepUserWallets(
      ['u010203', 'u030405', 'u050607'],                         // 要归集的用户ID
      ['0xc21dc5A1b919088F308e0b02243Aaf64c060Dbd0'],            // 要归集的代币地址集  
      '0x13b2fe2754f40555cbcbd6302da39fda21d5fec1'               // 接收地址
    );  
    console.log(`sweep txid => ${ret.tx}`);                      // 显示归集交易ID

    3.5 操作ERC20代币

    使用Kit对象的erc20()方法获取指定地址的ERC20代币实例,调用标准的ERC20接口即可操作代币。例如查询USDT余额并转账:

    const bob = '0xb8001c3e...e4a361ec1';                          // 某个接收地址
    const token = await kit.erc20('0xdac17f958d2ee523a2206206994597c13d831ec7'); // 获取token对象
    
    const balance = await token.balanceOf(bob);                    // 查询余额
    console.log(`balance => ${balance}`);                          // 显示代币余额 
    
    const ret = await token.transfer(bob, '100000000');            // 代币转账
    console.log(`sweep txid => ${ret.tx}`);                        // 显示转账交易ID

    SmartWallet.JS官方下载地址:http://sc.hubwiz.com/codebag/smartwallet-js/

    展开全文
  • udex-app-android:以太坊ERC20令牌的安全去中心化交易所+钱包
  • 如何创建以太坊ERC20代币

    千次阅读 2018-05-18 09:04:54
    什么是ERC20可以把ERC20简单理解成以太坊上的一个代币协议,所有基于以太坊开发的代币合约都遵守这个协议。遵守这些协议的代币我们可以认为是标准化的代币,而标准化带来的好处是兼容性好。这些标准化的代币可以被...

    看这篇文章需要对以太坊,智能合约,代币等概念有基本的了解。

    什么是ERC20

    可以把ERC20简单理解成以太坊上的一个代币协议,所有基于以太坊开发的代币合约都遵守这个协议。遵守这些协议的代币我们可以认为是标准化的代币,而标准化带来的好处是兼容性好。这些标准化的代币可以被各种以太坊钱包支持,用于不同的平台和项目。说白了,你要是想在以太坊上发行代币融资,必须要遵守ERC20标准。

    ERC20的标准接口是这样的:

      contract ERC20 {
          function name() constant returns (string name)
          function symbol() constant returns (string symbol)
          function decimals() constant returns (uint8 decimals)
          function totalSupply() constant returns (uint totalSupply);
          function balanceOf(address _owner) constant returns (uint balance);
          function transfer(address _to, uint _value) returns (bool success);
          function transferFrom(address _from, address _to, uint _value) returns (bool success);
          function approve(address _spender, uint _value) returns (bool success);
          function allowance(address _owner, address _spender) constant returns (uint remaining);
          event Transfer(address indexed _from, address indexed _to, uint _value);
          event Approval(address indexed _owner, address indexed _spender, uint _value);
        }

    name

    返回ERC20代币的名字,例如”My test token”。

    symbol

    返回代币的简称,例如:MTT,这个也是我们一般在代币交易所看到的名字。

    decimals

    返回token使用的小数点后几位。比如如果设置为3,就是支持0.001表示。

    totalSupply

    返回token的总供应量

    balanceOf

    返回某个地址(账户)的账户余额

    transfer

    从代币合约的调用者地址上转移_value的数量token到的地址_to,并且必须触发Transfer事件。

    transferFrom

    从地址_from发送数量为_value的token到地址_to,必须触发Transfer事件。

    transferFrom方法用于允许合同代理某人转移token。条件是from账户必须经过了approve。这个后面会举例说明。

    approve

    允许_spender多次取回您的帐户,最高达_value金额。 如果再次调用此函数,它将以_value覆盖当前的余量。

    allowance

    返回_spender仍然被允许从_owner提取的金额。

    后面三个方法不好理解,这里还需要补充说明一下,

    approve是授权第三方(比如某个服务合约)从发送者账户转移代币,然后通过 transferFrom() 函数来执行具体的转移操作。

    账户A有1000个ETH,想允许B账户随意调用他的100个ETH,过程如下:

    1. A账户按照以下形式调用approve函数approve(B,100)

    2. B账户想用这100个ETH中的10个ETH给C账户,调用transferFrom(A, C, 10)

    3. 调用allowance(A, B)可以查看B账户还能够调用A账户多少个token

    后面两个是事件,事件是为了获取日志方便提供的。前者是在代币被转移时触发,后者是在调用approve方法时触发。

    基于ERC20编写的一个代币合约

    pragma solidity ^0.4.16;
    contract Token{
        uint256 public totalSupply;
    
        function balanceOf(address _owner) public constant returns (uint256 balance);
        function transfer(address _to, uint256 _value) public returns (bool success);
        function transferFrom(address _from, address _to, uint256 _value) public returns   
        (bool success);
    
        function approve(address _spender, uint256 _value) public returns (bool success);
    
        function allowance(address _owner, address _spender) public constant returns 
        (uint256 remaining);
    
        event Transfer(address indexed _from, address indexed _to, uint256 _value);
        event Approval(address indexed _owner, address indexed _spender, uint256 
        _value);
    }
    
    contract TokenDemo is Token {
    
        string public name;                   //名称,例如"My test token"
        uint8 public decimals;               //返回token使用的小数点后几位。比如如果设置为3,就是支持0.001表示.
        string public symbol;               //token简称,like MTT
    
        function TokenDemo(uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol) public {
            totalSupply = _initialAmount * 10 ** uint256(_decimalUnits);         // 设置初始总量
            balances[msg.sender] = totalSupply; // 初始token数量给予消息发送者,因为是构造函数,所以这里也是合约的创建者
    
            name = _tokenName;                   
            decimals = _decimalUnits;          
            symbol = _tokenSymbol;
        }
    
        function transfer(address _to, uint256 _value) public returns (bool success) {
            //默认totalSupply 不会超过最大值 (2^256 - 1).
            //如果随着时间的推移将会有新的token生成,则可以用下面这句避免溢出的异常
            require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]);
            require(_to != 0x0);
            balances[msg.sender] -= _value;//从消息发送者账户中减去token数量_value
            balances[_to] += _value;//往接收账户增加token数量_value
            Transfer(msg.sender, _to, _value);//触发转币交易事件
            return true;
        }
    
    
        function transferFrom(address _from, address _to, uint256 _value) public returns 
        (bool success) {
            require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value);
            balances[_to] += _value;//接收账户增加token数量_value
            balances[_from] -= _value; //支出账户_from减去token数量_value
            allowed[_from][msg.sender] -= _value;//消息发送者可以从账户_from中转出的数量减少_value
            Transfer(_from, _to, _value);//触发转币交易事件
            return true;
        }
        function balanceOf(address _owner) public constant returns (uint256 balance) {
            return balances[_owner];
        }
    
    
        function approve(address _spender, uint256 _value) public returns (bool success)   
        { 
            allowed[msg.sender][_spender] = _value;
            Approval(msg.sender, _spender, _value);
            return true;
        }
    
        function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
            return allowed[_owner][_spender];//允许_spender从_owner中转出的token数
        }
        mapping (address => uint256) balances;
        mapping (address => mapping (address => uint256)) allowed;
    }

    代码不必过多的解释,注释都写得很清楚了。

    这里可能有人会有疑问,name,totalSupply这些按照标准不应该都是方法吗,怎么这里定义的是属性变量? 这是因为solidity会自动给public变量生成同名的getter接口。

    部署测试

    我会提供两个环境的部署测试流程,都是亲测过的,大家可以根据自己的喜好选择。我个人平时用得比较多的是后者。

    Remix+MetaMask环境部署测试

    这部分要求你的浏览器已经安装了MetaMask插件,至于什么是MetaMask以及如何安装和使用请自行搜索查询。MetaMask我们用的是测试环境的网络,在测试网络中可以申请一些以太币进行测试。

    我们把代码复制到remix编译,没问题的话如下图所示点击create创建合约,参数可以按照下图的方式设置。注意环境选择injected web3,这样会打开浏览器插件MetaMask进行测试部署。

    这里写图片描述

    点击create后会弹出合约确认界面,直接点击submit,等待合约确认。

    这里写图片描述

    我们可以在MetaMask里点击该笔合约提交的明细,就会跳转到以太坊的浏览器中,可以在这里看到合约的各种信息:

    这里写图片描述

    如上图所示,1表示该笔交易(合约也是一种交易)的hash值,2是当前合约所处的区块位置(当然是测试环境)和已经被确认的区块链数量,3是合约的创建地址,4是合约本省所在的地址。

    3和4的概念容易混淆,注意理解。

    进入MetaMask的token界面中,点击add token,然后我们把合约的地址复制到过去提交就可以看到我们的代币了。还可以点击代币的图标打开浏览器查看代币的详细信息。

    这里写图片描述

    到这里你已经完成了代币的开发部署。接下来我们还要看看如何进行代币的转账,这个也是代币比较常用的操作。转账我们需要结合以太坊钱包MyEtherWallet,这是个以太坊的网页版轻量级钱包,利用它可以很方便的对我们的以太币和其它代币进行管理。

    转账前我们首先要把代币加入到钱包中,

    这里写图片描述

    这里写图片描述

    注意在上图中,我们选择的环境同样是测试环境并且和MetaMask中的环境一致。点击add custome token,输入代币地址等信息就可以看到代币了,然后进行转账操作。

    这里写图片描述 
    我们随便转入一个地址,转账完成后,发现代币余额确实减少了。

    这里写图片描述

    以太坊钱包mist+geth私有环境部署测试

    我个人开发用这个环境比较多,不过这个环境安装起来比较麻烦,具体流程可以看下我以前的文章。

    打开mist钱包,进入合约界面,然后点击deploy new contact,然后把代码复制进去编译。

    这里写图片描述

    然后点击deploy

    这里写图片描述

    输入账户密码开始部署。

    随着挖矿的进行,合约就被部署到我的geth私有环境中了,

    这里写图片描述

    回到钱包的合约界面已经可以看到合约了, 
    这里写图片描述

    点击transfer ether&tokens,进入转账界面,进行转账。

    这里写图片描述

    这里写图片描述

    成功后可以看到余额已经减少,并且转入账户的余额增加。

    这里写图片描述

    这里写图片描述

    如果对以太坊开发有兴趣,推荐两个教程:

    1.适合区块链新手的以太坊DApp与智能合约、代币开发教程:

    以太坊代币开发

    2.用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建以太坊DApp电商平台教程:

    以太坊实战

    如果想加入以太坊技术开发群可以加微信拉你入群。



    展开全文
  • 以太坊ERC20合约开发首先需要对以太坊,ERC20,智能合约等以太坊开发中的基本概念有了解。根据我们的示例代码就可以发行自己的以太坊 什么是ERC20 可以把ERC20简单理解成以太坊上的一个代币协议,所有基于以太坊开发...

    以太坊ERC20合约开发首先需要对以太坊,ERC20,智能合约等以太坊开发中的基本概念有了解。根据我们的示例代码就可以发行自己的以太坊

    什么是ERC20

    可以把ERC20简单理解成以太坊上的一个代币协议,所有基于以太坊开发的代币合约都遵守这个协议。遵守这些协议的代币我们可以认为是标准化的代币,而标准化带来的好处是兼容性好。这些标准化的代币可以被各种以太坊钱包支持,用于不同的平台和项目。说白了,你要是想在以太坊上发行代币融资,必须要遵守ERC20标准。

    ERC20的标准接口是这样的:

    contract ERC20 {  
        function name() constant returns (string name)  
        function symbol() constant returns (string symbol)  
        function decimals() constant returns (uint8 decimals)  
        function totalSupply() constant returns (uint totalSupply);  
        function balanceOf(address _owner) constant returns (uint balance);  
        function transfer(address _to, uint _value) returns (bool success);  
        function transferFrom(address _from, address _to, uint _value) returns (bool success);  
        function approve(address _spender, uint _value) returns (bool success);  
        function allowance(address _owner, address _spender) constant returns (uint remaining);  
        event Transfer(address indexed _from, address indexed _to, uint _value);  
        event Approval(address indexed _owner, address indexed _spender, uint _value);  
      } 
    name

    返回ERC20代币的名字,例如”My test token”。

    symbol

    返回代币的简称,例如:MTT,这个也是我们一般在代币交易所看到的名字。

    decimals

    返回token使用的小数点后几位。比如如果设置为3,就是支持0.001表示。

    totalSupply

    返回token的总供应量

    balanceOf

    返回某个地址(账户)的账户余额

    transfer

    从代币合约的调用者地址上转移_value的数量token到的地址_to,并且必须触发Transfer事件。

    transferFrom

    从地址_from发送数量为_value的token到地址_to,必须触发Transfer事件。

    transferFrom方法用于允许合同代理某人转移token。条件是from账户必须经过了approve。这个后面会举例说明。

    approve

    允许_spender多次取回您的帐户,最高达_value金额。 如果再次调用此函数,它将以_value覆盖当前的余量。

    allowance

    返回_spender仍然被允许从_owner提取的金额。

    后面三个方法不好理解,这里还需要补充说明一下,

    approve是授权第三方(比如某个服务合约)从发送者账户转移代币,然后通过 transferFrom() 函数来执行具体的转移操作。

    账户A有1000个ETH,想允许B账户随意调用他的100个ETH,过程如下:

    A账户按照以下形式调用approve函数approve(B,100)

    B账户想用这100个ETH中的10个ETH给C账户,调用transferFrom(A, C, 10)

    调用allowance(A, B)可以查看B账户还能够调用A账户多少个token

    后面两个是事件,事件是为了获取日志方便提供的。前者是在代币被转移时触发,后者是在调用approve方法时触发。

    基于ERC20编写的一个代币合约

    pragma solidity ^0.4.16;  
    contract Token{  
        uint256 public totalSupply;  
      
        function balanceOf(address _owner) public constant returns (uint256 balance);  
        function transfer(address _to, uint256 _value) public returns (bool success);  
        function transferFrom(address _from, address _to, uint256 _value) public returns     
        (bool success);  
      
        function approve(address _spender, uint256 _value) public returns (bool success);  
      
        function allowance(address _owner, address _spender) public constant returns   
        (uint256 remaining);  
      
        event Transfer(address indexed _from, address indexed _to, uint256 _value);  
        event Approval(address indexed _owner, address indexed _spender, uint256   
        _value);  
    }  
      
    contract TokenDemo is Token {  
      
        string public name;                   //名称,例如"My test token"  
        uint8 public decimals;               //返回token使用的小数点后几位。比如如果设置为3,就是支持0.001表示.  
        string public symbol;               //token简称,like MTT  
      
        function TokenDemo(uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol) public {  
            totalSupply = _initialAmount * 10 ** uint256(_decimalUnits);         // 设置初始总量  
            balances[msg.sender] = totalSupply; // 初始token数量给予消息发送者,因为是构造函数,所以这里也是合约的创建者  
      
            name = _tokenName;                     
            decimals = _decimalUnits;            
            symbol = _tokenSymbol;  
        }  
      
        function transfer(address _to, uint256 _value) public returns (bool success) {  
            //默认totalSupply 不会超过最大值 (2^256 - 1).  
            //如果随着时间的推移将会有新的token生成,则可以用下面这句避免溢出的异常  
            require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]);  
            require(_to != 0x0);  
            balances[msg.sender] -= _value;//从消息发送者账户中减去token数量_value  
            balances[_to] += _value;//往接收账户增加token数量_value  
            Transfer(msg.sender, _to, _value);//触发转币交易事件  
            return true;  
        }  
      
      
        function transferFrom(address _from, address _to, uint256 _value) public returns   
        (bool success) {  
            require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value);  
            balances[_to] += _value;//接收账户增加token数量_value  
            balances[_from] -= _value; //支出账户_from减去token数量_value  
            allowed[_from][msg.sender] -= _value;//消息发送者可以从账户_from中转出的数量减少_value  
            Transfer(_from, _to, _value);//触发转币交易事件  
            return true;  
        }  
        function balanceOf(address _owner) public constant returns (uint256 balance) {  
            return balances[_owner];  
        }  
      
      
        function approve(address _spender, uint256 _value) public returns (bool success)     
        {   
            allowed[msg.sender][_spender] = _value;  
            Approval(msg.sender, _spender, _value);  
            return true;  
        }  
      
        function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {  
            return allowed[_owner][_spender];//允许_spender从_owner中转出的token数  
        }  
        mapping (address => uint256) balances;  
        mapping (address => mapping (address => uint256)) allowed;  
    }  
    代码不必过多的解释,注释都写得很清楚了。

    这里可能有人会有疑问,name,totalSupply这些按照标准不应该都是方法吗,怎么这里定义的是属性变量? 这是因为solidity会自动给public变量生成同名的getter接口。

    部署测试

    我会提供两个环境的部署测试流程,都是亲测过的,大家可以根据自己的喜好选择。我个人平时用得比较多的是后者。

    Remix+MetaMask环境部署测试

    这部分要求你的浏览器已经安装了MetaMask插件,至于什么是MetaMask以及如何安装和使用请自行搜索查询。MetaMask我们用的是测试环境的网络,在测试网络中可以申请一些以太币进行测试。

    我们把代码复制到remix编译,没问题的话如下图所示点击create创建合约,参数可以按照下图的方式设置。注意环境选择injected web3,这样会打开浏览器插件MetaMask进行测试部署。

    点击create后会弹出合约确认界面,直接点击submit,等待合约确认。

    我们可以在MetaMask里点击该笔合约提交的明细,就会跳转到以太坊的浏览器中,可以在这里看到合约的各种信息:

    如上图所示,1表示该笔交易(合约也是一种交易)的hash值,2是当前合约所处的区块位置(当然是测试环境)和已经被确认的区块链数量,3是合约的创建地址,4是合约本省所在的地址。

    3和4的概念容易混淆,注意理解。

    进入MetaMask的token界面中,点击add token,然后我们把合约的地址复制到过去提交就可以看到我们的代币了。还可以点击代币的图标打开浏览器查看代币的详细信息。

    到这里你已经完成了代币的开发部署。接下来我们还要看看如何进行代币的转账,这个也是代币比较常用的操作。转账我们需要结合以太坊钱包MyEtherWallet,这是个以太坊的网页版轻量级钱包,利用它可以很方便的对我们的以太币和其它代币进行管理。

    转账前我们首先要把代币加入到钱包中,


    注意在上图中,我们选择的环境同样是测试环境并且和MetaMask中的环境一致。点击add custome token,输入代币地址等信息就可以看到代币了,然后进行转账操作。


    我们随便转入一个地址,转账完成后,发现代币余额确实减少了。


    以太坊钱包mist+geth私有环境部署测试

    我个人开发用这个环境比较多,不过这个环境安装起来比较麻烦,具体流程可以看下我以前的文章。

    打开mist钱包,进入合约界面,然后点击deploy new contact,然后把代码复制进去编译。然后点击deploy
    输入账户密码开始部署。

    随着挖矿的进行,合约就被部署到我的geth私有环境中了,
    回到钱包的合约界面已经可以看到合约了,


    点击transfer ether&tokens,进入转账界面,进行转账。


    成功后可以看到余额已经减少,并且转入账户的余额增加。

    展开全文
  • 什么是以太坊ERC20和ERC721 首先,ERC是什么? ERC是由Etherum开发人员为益泰坊社区编写的。为了创建一个以太坊平台的标准,开发人员应当提交了一个以太坊改进方案(EIP,EthereumImprovementProtocol),改进方案...
  • 以太坊 erc20Editor Note: This article is for informational and entertainment purposes only and is not intended as financial advice. 编者注:本文仅用于提供信息和娱乐目的,不作为财务建议。 Hi there! It...
  • BringsEthereumtoyourbrowser一个可以浏览器上进行操作的以太坊钱包,推荐Chrome。2.在METAMASK创建钱包3.从以太坊官网复制代币代码模板CreateacryptocurrencycontractinEthereumwww.ethereum.org 4.修改代币参数...
  • 【Ethereum】以太坊ERC20与ERC233的区别

    万次阅读 2017-09-26 11:16:45
    合约中意外丢失token: 有两种不同的方式来转移ERC20 token: 1) 合约地址 2) 钱包地址 ,你需要调用transfer发送给钱包地址 或者 调用approve在token合约然后调用transferFrom在接收的合约来发送到合约。意外地,对...
  • 周一听了oldlee《如何发行基于以太坊的数字货币》的精彩演讲,才发现发行以太坊ERC20 Token很简单,这是一件小白也可以做到的事情。以下是我对本次讲座内容的实践: 一、安装环境 1、在chrome浏览器安装MetaMask...
  • 基于以太坊ERC20令牌代币的创建

    千次阅读 2018-05-10 13:14:33
    基于以太坊ERC20令牌代币的创建简介 当今虚拟货币界的第二把交椅便是以太坊(ETH),价格从2017年初的1颗10 USD到2018年初的1000 USD,以百倍的涨幅为人所知。以太坊另一特点便是智能合约功能,其中最知名的应用便...
  • 一个简单的钱包界面,为以太坊区块链ERC20智能合约提供转移功能。 用法 钱包界面通过GitHub Pages托管在 需要兼容的钱包提供商,例如MetaMask。 钱包连接到智能合约以进行测试。 可以通过在编辑以下行来更改与钱包...
  • 以太坊ERC20与ERC233的区别

    千次阅读 2018-01-18 12:14:28
    合约中意外丢失token: 有两种不同的方式来转移ERC20 token: 1) 合约地址 2) 钱包地址 ,你需要调用transfer发送给钱包地址 或者 调用approve在token合约然后调用transferFrom在接收的合约来发送到合约。意外地,对...
  • 测试网络现在不可使用于发行代币,下图...安装方法,下载后解压,在浏览器输入chrome://extensions/,将安装文件拖拽进浏览器,即可安装 3、新建钱包 输入密码,保存助记词 4、转入一个ETH(现在测试网络不能发...
  • 1、打开编辑器后。把合约代码复制到编辑器中(这里用我的上一个博客的ERC20高级代币源码) Start to compile编译合约代码、如果没有报错就可以了。 ...注:这里需要安装以太坊谷歌插件metamask...
  • 一.ERC20代币合约与web3调用 ERC20代币合约在小白看来觉得很高大上,但其实就是一个代币的定义标准,方便其他dapp统一调用各种代币的方法。如图: 二.ERC20合约标准 【官方链接】 contract ERC20 { //**********...
  • ERC 20以太坊中最常用的 ERC 标准,也就是该平台常用的数据通讯规则。2017 年发行的 ICO 加密代币中,90% 都执行了这一标准。大致来说,ERC 20 有两种转账方式,一种是收件方为一份合同,这种情况下用户必须使用 ...
  • 发行自己的以太坊ERC20代币---超级详细

    千次阅读 热门讨论 2021-05-16 13:47:41
    1、安装MetaMask插件+新建钱包 注意:电脑是需要ke学上网的,并且需要使用谷歌浏览 在谷歌浏览器中打开这个地址安装MetaMask钱包插件:...
  • 以太坊erc20转账失败的情况和原因

    千次阅读 2018-09-29 20:03:00
    以太坊erc20转账失败的情况和原因 eth转账失败有多种情况,除了手续费过低以外(Out of gas),众筹额度满了(Bad instruction)也会失败链上转账有可能失败,转账失败转账的币退回,但设置的手续费gas不退回的交易所...
  • 以太坊ERC20 Token标准完整说明

    千次阅读 2018-09-15 21:44:26
    可以通过.value()函数控制支付的以太币的数量 addr.call.value(1 ether)(1, "MyName"); 这两个函数可以不分顺序同时使用 addr.call.gas(1000000).value(1 ether)(1, "MyName"); 注意 合约中...
  • 利用以太坊的智能合约可以轻松编写出属于自己的代币,代币可以代表任何可以交易的东西,如:积分、财产、证书等等。 因此不管是出于商业,还是学习很多人想创建一个自己的代币,先贴一个图看看创建的代币是什么样子...
  • 一个可以浏览器上进行操作的以太坊钱包,推荐 Chrome。 Chrome 插件安装地址: https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn​chrome.google.com 2.在 ME...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,785
精华内容 1,114
关键字:

以太坊erc20钱包下载