基于以太坊私链token代币发布

所需积分/C币:50 2018-10-18 18:58:20 1001KB PDF
4
收藏 收藏
举报

ERC20和代币经常一同出现, ERC20是以太坊定义的一个代币标准。 要求我们在实现代币的时必须要遵守的协议,如指定代币名称、总量、实现代币交易函 数等,只有支持了协议才能被以太坊钱包支持,这样你的代币才具有交易和流通的能 力。目前ERC20存在一些无法解决的问题,但是新的标准ERC223以及出世,但市面上大 多数以太坊代币都采用ERC20标准,所以本文也使用ERC20标准实现自己的代码,最后会 对ERC20存在的问题给大家稍作解释,那接下来我们就进入正题
黑马程序员|智播客瓶下 www.itheima.co高端|T教百品牌 改变中国教育,我们正在行动 decimals 返回 token使用的小数点后几位。比如如果设置为3,就是支持0.001表示。 totalSupplyo 返回 token的总供应量 balanceofo 返回某个地址(账户)的账户余额 transfer 从代币合约的调用者地址上转移vaue的数量 token到的地址to,并且必须触发 Transfer事 transfer Fromo transferer方法用于允许合同代理某人转移 token。前提是被代理人调用 approve方法 允许代理人设置操作自己多少 token allowance 被代理人设置代理人操作自己的多少 token approved 更改被代理人设置代理人操作自己的多少 token,并且必须触发 Approval事件 Transfer事件 代币被转移时触发该事件,记录转账日志 Approval|事件 黑马程序员|他置提率下 育品牌 改变中国教育,我们正在行动 调川 approve方法时触发,记录授权日志 注意:以上ERC20标准代币接口方法只是标准,并不是所有方法都需要实现,当然 我们还可以根据自己的业务增强自己的代币,比如实现代币管理、代币增发、代币 兑换、资产冻结、Gas自动补充等功能的高级代币 32代币合约实现 pragma solidity 0.4. 16, interface tokenRecipient[ function receiveApproval(address from, uint256 value, address token, bytes _extraData) public; y 黑马程序员|智播客瓶下 www.itheima.co高端|T教百品牌 改变中国教育,我们正在行动 contract TokenERC20 t string public name;// token的名字 string public symbol;// token的简称 uint8 public decimal5=18;// decima15可以有的小数点个数,最小的代币单 位。18是建议的默认值 uint256 public totalSupp1y;// token的总数 //用 mapping保存每个地址对应的余额 mapping (address =>uint256) public balanceof; //存储对账号的控制 mapping (address =>mapping (address => uint256)) public allowance; //事件,用来通知客户端交易发生 event Transfer(address indexed from, address indexed to, uint256 alue), //事件,用米通知客户端代币被消费 event Burn(address indexed from, uint256 value) 米米 初始化构造 function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public i totalSupply= initialSupp1y*10**uint256( decima15);//供应的份 额,份额跟最小的代币单位有关,份额=币数*10** decima1s balanceof[msg sender= totalSupply //创建者拥有所 有的代币 name tokenName //代币名称 symbol tokenSymbol; //代币符号 米米 *代币交易转移的内部实现 function transfer(address from, address to, uint value internal t /确保目标地址不为8x9,因为θx地址代表销毁 require(to!=×8); /检查发送者余额 require(balanceofl from]>=value) 黑马程序员|智播客瓶下 www.itheima.co高端|T教百品牌 改变中国教育,我们正在行动 //确保转移为正数个 require(balanceof[ to]+ value> balanceof[ to; //以下用来检查交易, uint previous Balances balanceof[ from]+ balanceof[ to] / Subtract from the sender balanceofi from] Va⊥ue; // Add the same to the recipient balanceof to] +=value; Transfer( from,to, value); /用 assert来检查代码逻辑。 assert(balanceof from]+ balanceof[ to]== previousBalances); /*米 *代币交易转移 *从自己(创建交易者)账号发送` value`个代币到丶to^账号 @ paramo接收者地址 *@ param value转移数额 function transfer(address to, uint256 value) public i transfer(msg sender, to, value); *账号之间代币交易转移 *@ param from发送者地址 @ param to接收者地址 *@ param_ value转移数额 function transfer From (address from, address to, uint256 value) public returns(bool success)( require( value (=allowance[from][msg sender]); // Check allowance allowance fromI[msg sender]-= value; transfer( from, to, value); return true 黑马程序员|智播客瓶下 www.itheima.co高端|T教百品牌 改变中国教育,我们正在行动 *设置某个地址(合约)可以创建交易者名义花费的代币数 *允许发送者 spender`花费不多于 value个代币 c @param spender The address authorized to spend s @param value the max amount they can spend function approve(address spender, uint256 value) public returns(bool success)t allowance[msg sender][spender]=_value; return true; 水水 *设置允许一个地址(合约)以我(创建交易者)的名义可最多花费的代币数。 @ param spender被授权的地址(合约 @ param value最大可花费代币数 *@ param extraData发送给合约的附加数据 function approveAndCall(address spender, uint256 value, bytes extradata public returns(bool success)i tokenRecipient spender tokenRecipient( spender)i if (approve(spender,_value))t //通知合约 spender. receiveApproval(msg sender, value, this, extraData); return true j 水水 *销毁我(创建交易者)账户中指定个代币 function burn(uint256 value) public returns (bool success)[ require(balanceof[msg sender] >=value); //Check if the sender has enough balanceof[msg sender] Va⊥ue; // Subtract from the sender 黑马程序员|智播客瓶下 www.itheima.co高端|T教百品牌 改变中国教育,我们正在行动 totalSupply value / Updates totalSupply Burn(msg sender, value); return true 半半 *销毁用户账户中指定个代币 Remove value tokens from the system irreversibly on behalf of from @param from the address of the sender @param value the amount of money to burn function burnFrom(address from, uint256 value) public returns(bool success)( require(balanceof[ from] >= value); / Check if the targeted balance is enough require( value < allowance[ from][msg sender]);// Check allowance balanceof[ fromI-= value / Subtract from the targeted balance allowance[ from][msg sender]-= value; / Subtract from the sender 's allowance totalsupp l va⊥ue; // Update totalSuppl Burn( from, value)i return true; 四、部署 采用以太坊钱包mist+geth私有环境部署 以太坊私链的搭建和mist钱包的安装与使用请自行学习 4.1启动私链 黑马程序员|他置提率下 育品牌 改变中国教育,我们正在行动 h, geh --identity TestHcdel--dat rpcasidb, 3th, net, eb3 --rpcaddr-27 tworkid? any hole Ea defaul t 03 Starting peer-to-peer node instance=Geth/TestNode1/v1.7. 2-stable-1db4ecdc/wind d64/g 19: 03 Allocated cache and file kandle 1024 WARN.05-271-5: 19: 04] Upgrading da -abase c use lookup entrie INF005-27-5: 19: 04] Dat abase dedur l icat. ' rn snlc d per=O in configuration config-CnainI): 101 omestead: 0 DA3: ini1> DAOSucport EIP 55: EIP&: [] Byzantium: <nil> Er Disk storage Enabled for Et ash caches dir=E: \geth\ data0\\geth'ethash count ElL Ap a etha i Lial-cinig [lle- euu prulu:ul EI SIUIL=”LG 102生 Leaded mest r∈cnt,cca1土u11k1aek umer=0 ha NEU:05-275:19:04Lc R∈g6 erated-Cea1ta的图心t1上r1raa心tig=0 accounts=0 =ru://9c1bukb88J8638737b47c06uu578470i7e29588b lele 30cc2931d9c7483k72a2ce46c6246592782565b703ab8ofcfdcebac0-da3ebfac 304 elf=enode: //4clbdek e8737b47c08e6dd57847067e29588b b59a30cc2931d9c748372a2cc16c621639278256b703ab80 fcfdcek3c0d3c6fa@[:]:30301 ndpcint cpened p1日8th,ip 7.0.0.1:45 Alme tn the Geh javaScrip. cnnsr1e 私链启动成功 nstance: Geth/TestNodel/v1.7.2-stakle-ldb4ecdcwindows-aLmdE4/go1.3 rrodu-cg: adr.in: 1.0 debug: 1.0 cth: 1.0 minor: 1.0 not: 1.0 porco al: 1.0 rpc: 1.0 spool: 1.0 icb3: 1.0 42新建账号 personal. newAcco'nt 0C1 新建账号命,jw001是该账号的密码 x4B∠r6∠a304 T9bfe441947 personal. ncwAcco-ntiwqQr 这个是新建账号成功返囗账号的地址 bab7e930fbi 查看账号命令,显刚刚创建两个账号的地址 0x4d82cd762a3644-ae0 97b1c15602bc432b8f5ab7e=30fba"] 43挖矿 挖矿:挖矿可以获得私有链的以太币,囚为我们需要部署我们上面写的代币合约就 需要消费gas,gas就是相应的以太币。挖矿默认采用第一个账号进行,如下所示 黑马程序员|智播客瓶下 www.itheima.co高端|T教百品牌 改变中国教育,我们正在行动 在控制台输入: miner. start(即可开始挖矿 3133] Updated mining threads Fo [05-27 15: 33: 33] Transaction pcol price -rreshold updated price=1203 15, 38)-ing .ining uperaLiul lapsed=0 number=1 e42E9…595995 lined potemtial bock number= hash=e427895959c5 挖了很多ubx2txg0u1e01p0g hash=32cdbbe0b4c1 number INT nurber-3 375186=0 mined potential block hash=2c445g…87d516 44」 Commit new miri number=4 txs=O uncles=D elapsed=1. 002mS 13: 45]Succ.assf111'y sEaled new b.1.k hash=bs695 mined potetial block 3: 45 Commit new miring work les=0 elapsed= uccessful-y sealed new bl]ck numbe 口口.incd potentia1 block : 1E5 6] Commit new miring work number apsed=Os AF0[05-27|15:33:48] Successfu1ysa1 number=6 hash=6120<E""05128 nummbEr= hash=e42789-5959 rk NEO「05 49 Commit new miri haah-673b5…b421h1 aled new lock ched canonical chain N0[05-2715:33:51]co number=c txs=o uncle .ined potent hash-2s0:0f…·b95996 停止挖矿 查看余额 eth getBalance(eth accounts [Oo]) 0000000000000000000 查看余额 4.4打开Mist钱包并连接到私链

...展开详情
试读 16P 基于以太坊私链token代币发布
立即下载 低至0.43元/次 身份认证VIP会员低至7折
抢沙发
一个资源只可评论一次,评论内容不能少于5个字
上传资源赚积分or赚钱
    最新推荐
    基于以太坊私链token代币发布 50积分/C币 立即下载
    1/16
    基于以太坊私链token代币发布第1页
    基于以太坊私链token代币发布第2页
    基于以太坊私链token代币发布第3页
    基于以太坊私链token代币发布第4页

    试读结束, 可继续读1页

    50积分/C币 立即下载 >