ERC 和 EIP 代表什么呢?

以太猫 (Cryptokitties), 上次 台北以太坊 Meetup 社团活动 讨论它的原始码程序时, 发现 github 里 cryptokitties-bounty 程序代码提到它是用 ERC-721 token 标准来定义每只以太猫, 也就是:

“CryptoKitties are non-fungible tokens (see ERC #721) that are indivisible and unique.”
以太猫是非同质代币,不可分割且独一无二。

也许大家比较熟悉的是 ERC #20. 它是比较早期订出的代币标准. 所以后来想要在一般虚拟币交易所能交易的 tokens (代币), 就会用这个标准来写程序. 也就是后来 ICO 快速延烧的主要原因.

那么, ERC-721 跟 ERC-20 有什么不同, 简单说就是: ERC-721 是用来定义 Non-fungible token (不可替代的代币). 每个代币是 unique (唯一的), 不像 ERC-20 每个 token 都相同.

以上用加密猫举例, 是让大家体会一下什么是 ERC, 但 ERC 不是只用来讨论代币, 还有其他各式各样的 ERCs, 因为它是 Ethereum Request for Comment 的缩写, request for comment 是征求大家意见 的意思.

EIP stands for Ethereum Improvement Proposals (以太坊改进建议)

很像有人写过类似的 EIP 介绍, 但我还是从 ERC 的角度再介绍一次.

它的清单在 EIPs 里. 你可以看到讨论的过程, 追踪这些 EIPs 的新讯息, 也许有帮助理解 Ethereum 开发团队的未来动向; 甚至你也可以全程参与.

大家都希望 Ethereum 网络的未来技术走向不要集中在几个硏发人员的手里, 所以才开放给大家提出 Proposals (建议), 用来改进 Ethereum, 决定未来开发方向. 这就是每个人每件跟 Ethereum 未来发展有关的事情, 都能用 EIP 建议格式 (EIP template) 提出来. 只要被大家选上, 就会正式列入 EIPs 清单.

而且, 你会看到 EIP 定义或讨论 issues 里, 常常会看到它相关的 ERC, 也就是, 讨论过程中, 有一些要征求更多人意见时, 就会把它细节定义放在 ERC 里. 而且他们会用同一个号码, 比如 ERC-20就是对应到 EIP-20.

简单讲, 讨论项目, 一开始会用 EIP 提出建议, 结果与细节会定义在 ERC, 最后会 final (拍板定案), 放在 EIP 清单里 Finalized EIPs 区.

在Go语言中,如果你想要获取用户提供的EIP-2771(ERC-725)签名数据,首先你需要了解几个关键点: 1. **理解EIP-2771**:这是一种标准,它允许智能合约请求用户的个人信息,并保证数据的安全性私密性。用户需要使用他们的钱包软件(如Metamask或其他支持该功能的钱包)来签署包含所需信息的数据。 2. **Web3 Go库**:Go官方有web3go库,它是与以太坊交互的标准库,可以用于访问账户信息交易等操作。 3. **加密签名**:在Go中,你可以使用`secp256k1`库来进行ECDSA(Elliptic Curve Digital Signature Algorithm)签名,这是以太坊常用的数字签名算法。 以下是获取签名数据的一个简单示例步骤: ```go package main import ( "context" "crypto/ecdsa" "fmt" "math/big" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/web3go/rpc" ) // 用户输入的待签名消息 const message = "Your data here" func main() { // 创建一个新的RPC客户端,替换为你实际的节点地址 client, err := rpc.DialHTTP("http://localhost:8545", "") if err != nil { fmt.Println("Failed to connect to node:", err) return } defer client.Close() // 获取用户私钥 privateKey, _ := hexutil.Decode("0xYourPrivateKeyHexHere", big.NewInt(0)) // 转换为ECDSA秘钥 signer, ok := ecdsa.ParseECDSA(privateKey) if !ok { fmt.Println("Invalid private key format") return } // 使用Web3 Go将消息转换为EIP-2771格式 eip2771Msg, err := web3.EIP2771Encode(context.Background(), client, message, signer.Public()) if err != nil { fmt.Println("Error encoding EIP-2771 message:", err) return } // 现在eip2771Msg是一个JSON字符串,包含了签名所需的全部信息 fmt.Println("Signed EIP-2771 message:", eip2771Msg) } ``` 记得替换掉`"0xYourPrivateKeyHexHere"`为用户的私钥哈希值。此代码仅作演示,实际应用中需要处理错误并确保私钥安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web3.0前沿技术研究者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值