主页 > imtoken钱包下载苹果 > 智能合约、代币(Token)等——区块链技术学习笔记

智能合约、代币(Token)等——区块链技术学习笔记

imtoken钱包下载苹果 2023-05-24 07:35:08

代币制作以太坊_以太坊代币模型_如何在以太坊上发代币

智能合约(Smart Contract)是区块链的一个重要功能。 说到智能合约,我们不得不把目光从比特币转向以太坊,因为完全支持智能合约是以太坊和比特币的一大区别。

让我们发送一个硬币

听说区块链可以发币,想发自己的币①? 来吧,直接上代码!

希望即使看不懂代码,也能放下心来,静下心来,逐行阅读。 毕竟代码很简单,大部分人都能看懂。

合同 XMT {

映射(地址=> uint)公共balanceOf;

函数 XMT() 公共 {

balanceOf[msg.sender] = 1000;

}

函数传输(地址到,uint 值)public {

代币制作以太坊_如何在以太坊上发代币_以太坊代币模型

要求(balanceOf[msg.sender] >= value);

要求(balanceOf[to] + value >= balanceOf[to]);

balanceOf[msg.sender] -= 值;

balanceOf[to] += 值;

}

}

惊喜来了。 上面的代码不是概念上的伪代码,而是真实的可以运行的代码。

首先,它定义了一个记录每个账户余额的数组:balanceOf。

映射(地址=> uint)公共balanceOf;

不懂的同学会把它看成一个有两列的表格,第一列是账号,第二列是余额。 使用 balanceOf [account number] 查看该账户的余额,也可以更改余额。

接下来是两个函数:初始化和传输。

如何在以太坊上发代币_代币制作以太坊_以太坊代币模型

初始化函数XMT()很简单,就是在合约成立时,将任意1000个币全部给创建者。

balanceOf[msg.sender] = 1000;

大家要问了,币是怎么产生的? 没有制作过程,想给谁就给多少。 一开始写1亿,就有1亿币。 币可以随意生成,希望能在夜深人静的时候引发大家对什么是币的深刻思考。

我们继续:

转账代码transfer()的核心是两句:

balanceOf[msg.sender] -= 值;

balanceOf[to] += 值;

发起转账的人将从他的 (msg.sender) 帐户余额 (value) 中减去该金额,然后将其添加到收款人 (to) 的余额中②。

不要小看这两句话。 仔细想想,这其实就是账户和转账的本质。 简单的两句话,就是银行系统在软硬件、人力物力上耗费了这么多年的成果。

大家经常听说某某又发币了。 从技术角度来看,包含这三行代码的合约部署在以太坊上。 以太坊官网有100多行的标准代码:。 这段代码还有其他的功能,比如给token分配名称和符号,还有授权转移和销毁等功能。 您只需复制此代码,指定您的新币种名称(如小猫币)、符号(如:XMT)⑦、初始流通量如:1,000,000,000),一个新币种就会诞生。 整个过程3分钟应该足够了。 更改参数并部署代码后,第二种新货币再次诞生。

这种新生的货币,虽然没用,但在安全性上与以太坊本质上是一样的。 就像父母给孩子一些饭票,饭票的防伪技术和美元是完全一样的。 这似乎有点大材小用,但如果将发行货币的成本降低到几乎为零如何在以太坊上发代币,将防伪能力提高到已知的最高水平,随着时间的推移,很难说没有重要的应用。

以太坊代币模型_如何在以太坊上发代币_代币制作以太坊

部署代码

代码都看懂了,接下来呢? 如何运行这段代码? 这段代码到底在哪里运行? 接下来我们看看部署过程。

要部署代码,您需要将此代码粘贴到以太坊客户端并按下“部署”按钮。 客户端会将这段人类可读的代码③编译成字节码,然后生成一个从你的地址到一个空地址(0x0)的交易,并将字节码存储在给定的字段(称为输入)中,签名并发送到全网。 接下来的操作和正常交易完全一样。 矿工收到后,立即开始打包,计算nonce,找到后发送给全网。 这段可以执行的代码以只读不改的方式永久保存在区块链上。

智能合约建立后,会返回一个地址。 每个硬币唯一对应一个智能合约,即一个地址。 例如,著名的 EOS 币是由地址为 0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0 的智能合约发行的。 您可以将此地址视为以太坊世界中的门牌号。 硬币通过这个独特的门牌号码来区分如何在以太坊上发代币,而不是三位数的名字。

调用合约

现在,合约代码安全地存储在区块链上。 那么下一段代码什么时候执行呢?

智能合约中有多种功能。 调用智能合约中的函数与发起正常的转账交易是一样的。 已经内置了很多客户端,你提供合约的地址,提供调用的函数,传入参数,然后发送消息开始执行⑤。 您可以将其理解为从具有门牌号的房屋中取出或放入给定房屋中的东西。

消息发出后,所有矿工执行这段代码,并尝试将结果打包到自己的数据块中,获胜的矿工获得挖矿奖励。 所有节点接收到这个新区块,并用自己的虚拟机执行代码,在确认结果与接收到的区块中的结果相同后,将其作为合法区块接受。

区块链就是通过这种过度的浪费,看似无意义的nonce计算,看似无意义的重复,无休止的执行同一段代码来保证系统的安全。 这件事就像早上叠被子,晚上展开被子一样。 看似没什么价值,其实是房(shu)室(ju)整(an)净(quan)不可或缺的一环。

成本气

既然代码要被所有节点重复执行,那么问题来了:如果有人写了一段特别长的代码,或者谁写了有问题的代码,死循环不结束怎么办? 以太坊的解决方案是引入gas,每次操作都是收费的。 如何充电?

如何在以太坊上发代币_代币制作以太坊_以太坊代币模型

首先,每笔交易的代码执行量越大,需要的gas就越多。 每个字节码操作都有固定的 gas 成本。 以货币代码为例,下面是以太坊发给我的账单。 总共执行了 320 次字节码操作。 有的操作成本很低,比如压栈(PUSH1),只要3个单位的gas,有的操作成本很高,比如在区块链上存储数据(SSTORE)一次要20000个单位,读数据(SLOAD)中型,200 个单位。 加起来如下是 1,300,213 单位的气体。 只要执行这段代码,就需要那么多的gas,就像汽车修理厂的工作时间概念一样。

以太坊代币模型_代币制作以太坊_如何在以太坊上发代币

提交时,每个人都可以出价,声明他们愿意为每单位 gas 支付多少(价格)。 这有点像修理厂每工时的价格。 例如,你可以发行 8 gwei/gas,或者 20 gwei/gas ⑥。 大部分矿工都是按照这个价格排序,优先打包钱多的。 如果你少付钱,它会很慢,甚至没有人会注意。

矿工费=gas单位数*单价。

对于下图所示的交易,1,300,213 gas * 2 gwei/gas = 2,600,426 gwei,即 0.002600426 以太币,相当于 1.832 美元。 最终将交易纳入区块链的矿工获得这部分费用。

以太坊代币模型_如何在以太坊上发代币_代币制作以太坊

除了价格,你还需要指定一个gas limit,即你愿意为这段代码支付多少单位的gas。 这是为了防止代码出现问题,无限循环一直持续到您帐户中的钱用完为止。 如上图所示,gas limit设置为1,300,213单位。 这段代码实际上只使用了 1,300,213 个单位的 gas。 幸运的是,没有超过限制。 否则,程序的执行会突然停止,消耗的gas也不会返还。

智能合约的价值

智能合约首次承认代码的自主性。 代码可以拥有财产,可以在区块链上与人平等交易。 一份合约的代码一旦发布,任何人都无法更改,即使是上帝。 这就是信任的来源。 大家可以坚信,这个合约是按照代码写的执行的,就像自然规律一样。 你不需要相信任何人,只需要仔细阅读智能合约的代码,你就可以确定地知道合约将如何执行。

以上从技术层面简单介绍了智能合约的流程。 但智能合约和区块链的真正价值不在于技术,而在于它们对价值传递和信任建立的贡献。

我们看到的人类发展总是沿着多条线前进,一条是生产效率,蒸汽机、电力、计算机、互联网、人工智能等都在这条线上; 区块链是生产关系进步线上,这条线上以前有货币,现代公司制度,股票,现在有区块链。

代币制作以太坊_以太坊代币模型_如何在以太坊上发代币

我稍后会谈到它对信任的贡献,以及它对社会可能带来的改变。

背注

① 很多专业人士想把token翻译成证书,而不是token。 “Token”更符合这个词的本义,符合事物的本质,也希望作为货币来避免被监管。 这与“weblog”和“blog”两种译法之争非常相似。 结果博客被接受了,更准确,更诙谐,后来的博客就不再提了。 这个结果可以预测令牌翻译的结果。

②Transfer function前面的两句要求,第一个是要求你的余额必须大于转账金额,第二个是要求转账金额不能太大不能大于可以转账的数额由 256 个整数容纳。 msg.sender 是内置的,用于获取消息的发件人地址。

③ 可以搜索Remix,或者MyEtherWallet。 Solidity 的语法与 JavaScript 非常相似,专门用于编写以太坊上的智能合约。

④ 在这里解释技术细节。 在建立合约时,用户发起一笔交易,发送方为自己,收款方为空地址0x0,并将字节码放入交易中名为Input的字段中。 矿工将生成一个新的合约地址,并将代码存储在该地址中。

⑤技术实现实际上是在交易数据的Input字段中加入一个编码的数字。 例如,这串数字:a9059cbb000000000000000000000000007fdf7518745170e3d9de26874578b6c0a72b9dc00000000000000000000000000000000000000000000100000

颜色是我加的,用来区分,前四个字节a9059cbb是函数名,字符串"transfer(address,uint256)"的SHA3-256哈希结果a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b的前4位用来指定是哪个函数,根据函数定义,你知道最后32位是第一个参数:address,也就是0x07fdf7518745170e3d9de26874578b6c0a72b9dc。接下来的32个字节是

金额,相当于十进制的 16。 可以看到现在的区块链在抽象层面上基本上还停留在计算机DOS和汇编语言时代。

⑥ 1 gwei 表示 1,000,000,000 wei。 这个g和内存单元中的GB数是同一个概念,就是10亿。 10 的 18 次方 wei 等于一个以太。 所以1gwei看起来很大,但实际上是10的1/10的以太的9次方。 在我写这篇文章的时候,一个以太坊是 764 美元,你可能知道它是多少。

⑦ 发行硬币时指定的名称和符号只是一串字符,可以重复。 您可以发送一种名为 USD、RMB 或任何您能想到的名称的货币。 Token由发行该Token的智能合约地址唯一指定,与名称无关。