主页 > imtoken安卓版下载app > 5分钟教你发行ERC20代币及代币生态

5分钟教你发行ERC20代币及代币生态

imtoken安卓版下载app 2023-03-07 07:34:04

本文将介绍代币生态系统如何运作、如何发行代币以及如何使用通用编程语言 (Java) 进行操作。

虽然搜了很多类似的文章,但根据作者的实践,真正能把整个过程讲解透彻并实现无障碍实践的文章寥寥无几,所以本文将实践之后的内容重新整理,希望对感兴趣的朋友有所帮助。

代币生态

首先介绍一下通证生态的运作,先介绍一个常见的基于通证的商业模式。比如一个APP的slogan是“XX就是挖矿。我的,随时提现到钱包,发财就是这么容易。”这里提到几点,挖矿、提现、发财。这个口号非常具有误导性。什么是挖矿挖出来的,真正的矿?我在哪里可以提取现金,支付宝?如何致富。

可以以几乎零成本创建代币,然后将其存储在合约创建者的以太坊钱包中。这里挖出的代币其实是项目方发行的代币。而且提现的不是微信支付宝,而是以太坊钱包,提现需要将代币转入交易所进行交易。至于能不能发财,就看你手上的代币和项目的前景了。

这个代币生态主要分为APP和APP。 APP用户可以通过XX挖矿获得代币。代币不是真正的以太坊网络上的代币,它只存在于APP的服务器中,与传统的积分没有区别。

然后用户可以通过“提现”操作将代币提现到自己的以太坊钱包中,通过代币智能合约实现提现。为什么不呢,当用户 XX 挖矿时,代币会被发送到用户的以太坊钱包中?可能有的项目会这样做,但是以太坊网络转账需要消耗GAS(以太坊),并且每次token转账需要消耗0.001 - 0.002以太坊(目前价格大概在5元左右) ),用户的每一次“挖矿行为”都可能让她获得代币,频繁转账成本高,项目方锁仓等控制行为也不方便。

因此,大多数模型都必须经过提款申请流程。提款会提到支持ERC20代币的钱包,比如imtoken。钱包里的代币还是一串数字。只有项目方在交易所操作代币,才有可能进行交易和套现。代币的价格通常与上市交易所直接挂钩。如果经营知名交易所,比如币安、火币等,币价可能会走强。如果是未知的交易所,可能会倒霉。

有了可以交易代币的交易所,用户可以将代币提现到交易所,通过出售代币获得USDT、ETH、BTC等硬通货数字货币,最后在法币交易板块(OTC ) 出售,收到法定货币以完成兑现。

你是不是觉得这个模型是一只空手套,零成本生成一堆数字,然后用户疯狂地进来挖,至于用户到底能不能赚钱,就看资本运作和业绩了二级市场的。记得周鸿祎大叔曾经说过,XX比**挣钱多,我们要挣这种钱。所以下面的内容将详细讲解如何发行代币以及如何使用通用编程语言进行操作。

代币发行

前期准备:外网连接、以太坊钱包(MetaMask)、ERC20代币智能合约。

在 Chrome 插件商店中搜索并安装 MetaMask 后,使用它为我们初始化一个以太坊钱包。

为了测试,我们可以点击左上角切换到测试网络

数字货币的发行需要消耗以太坊,测试所需的以太坊可在测试网免费获取:

以太网水龙头ERC20代币地址与以太坊地址ERC20代币地址与以太坊地址,然后单击向我发送 1 个测试以太!一段时间后,以太坊将被转移到您的帐户。如果是在真实网络上,你需要去交易所购买以太坊,然后将其提取到你自己的 MetaMask 钱包中。当然你也可以使用 MetaMask 导入以太坊钱包。

然后可以发布智能合约。我在这里准备一份智能合约:

这个合约看起来很复杂,但基本上是基于各个开源社区的合约内容。如果你懂面向对象的语言,合约的内容就很好理解了,类似于Java的接口、继承等概念,最终要发布的智能合约DncToken继承并实现了几个接口。除了ERC20标准接口外,还具有总量限制、可烧录等特点。

拥有一份智能合约并将其发布到以太坊网络。我们使用 Remix - Solidity IDE 网站发布智能合约。 MetaMask 会在网站上填写与当前账户相关的信息。我们只需要粘贴智能合约的代码,更改配置即可:

网站当前使用的solidity编译器的版本号修改为与文件头一致,去掉Enable Optimization。然后切换到编译页面,点击开始编译。

最后,在运行页面,点击部署

然后会弹出MetaMask确认页面,输入Gas数量,点击提交。

然后就可以看到合约开始部署了~

部署完成后,点击合约,会打开一个网站供你查看合约详情:

点击合约地址,会跳转到合约验证和发布页面,点击验证并发布

填写以下信息,同时粘贴代码:

将其拉到底部,然后确认。发布成功后,会看到如下页面:

然后在账号中,可以看到如下内容:

因为在这个智能合约的初始状态,只规定了代币的总量。只有调用mint(铸币)函数才会为一个账户铸币,铸币总量不能超过约定的代币总量。当然,也可以使用传递函数。 ,铸币后转账到其他地址,那么如何使用常用的编程语言来操作代币智能合约,以Java为例进一步说明。

Java 操作令牌

很多文章会安装一堆东西,比如以太坊本地运行环境等,其实你根本不需要,只要安装solidity(智能合约)编程语言)编译工具solcjs和以太坊Java接口工具web3j就足够了,通过网络就可以完成与以太坊网络的工作。

先安装基础工具:(Mac系统)

sudo npm install -g solc
brew tap web3j/web3j
brew install web3j

为 Java 项目添加依赖项


org.web3j
core
3.5.0

然后把智能合约文件放到Java项目的根目录下,执行

#!/usr/bin/env bash
solcjs dnc.sol --bin --abi -o ./
web3j solidity generate --solidityTypes dnc_sol_DncToken.bin dnc_sol_DncToken.abi -o src/main/java -p org.bilan.module.asset.dnc

然后在Java项目的org.bilan.module.asset.dnc包中,出现了智能合约的Java版本~

然后使用以下代码加载智能合约

package org.bilan.module.asset;
import org.bilan.module.asset.config.ContractConfig;
import org.bilan.module.asset.dnc.Dnc_sol_DncToken;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.web3j.crypto.Credentials;
import org.web3j.crypto.WalletUtils;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.http.HttpService;
import org.web3j.tx.gas.DefaultGasProvider;
import java.math.BigInteger;
/**
* Created by Vic on 2018/8/5.
*/
@Componentpublic class ContractLoader {
@Autowired
private ContractConfig config;
private static Logger logger = LoggerFactory.getLogger(WithdrawJob.class);
public Dnc_sol_DncToken loadContract(){
try{
//以太坊基础设施网络申请访问 https://ropsten.infura.io
Web3j web3j = Web3j.build(new HttpService(config.getNet()));
Credentials credentials = WalletUtils.loadCredentials(
config.getPassword(), //钱包密码
config.getKeyStore()); //钱包的 keystore 文件
Dnc_sol_DncToken contract = Dnc_sol_DncToken.load(config.getAddress(), //合约地址
web3j, credentials, DefaultGasProvider.GAS_PRICE, DefaultGasProvider.GAS_LIMIT);
return contract;
}
catch (Exception e){
logger.error("load contract error", e);
return null;
}
}}

一些解释。 config.getNet() 配置是在以太坊基础设施网络中申请的访问。简单注册后,就可以使用它提供的Access Key访问以太坊主网和测试网。钱包密码是在创建钱包时创建的。 MetaMask 不支持导出 keystore 文件,所以一开始使用 MetaMask 创建钱包似乎是不明智的。我们需要在官网申请一个钱包,然后使用MetaMask导入。

Dnc_sol_DncToken.load函数需要的地址是智能合约的部署地址,前面的内容中提到过。

合约加载完成后,可以调用合约中的函数,比如调用mint函数(mint):

 

Integer decimal = contractConfig.getDecimals();
BigDecimal decimalPart = BigDecimal.TEN.pow(decimal);
BigDecimal amount = mintApplyVo.getAmount().multiply(decimalPart);
Address toAddress = new Address(mintApplyVo.getAddress());
TransactionReceipt receipt = dnc.mint(toAddress, new Uint256(amount.toBigInteger())).send();

值得注意的是,如果要铸100个币,给智能合约的参数是100 * pow(10, decimal),这个小数是智能合约中描述小数位数的参数这枚硬币。

调用成功后会返回TransactionHash,交易的详细数据可以在TransactionHash上找到。这笔交易已经打包进区块,不可篡改~

再看转接电话:

BigDecimal decimalPart = BigDecimal.TEN.pow(decimal);
BigDecimal amount = vo.getAmount().multiply(decimalPart);
Address toAddress = new Address(userWalletVo.getEthAddress());
TransactionReceipt receipt = dnc.transfer(toAddress, new Uint256(amount.toBigInteger())).send();

和调用mint没什么区别,只不过这次使用的是transfer函数。铸币后,你可以在钱包里看到这个token,也可以转给别人~

你是不是觉得很简单呢~有兴趣的可以自己试试,不过别说是什么ICO?如果你看了这篇再去发币搞ICO,被判非法集资,我概不负责~