GO语言-生成区块链账户地址

这篇具有很好参考价值的文章主要介绍了GO语言-生成区块链账户地址。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情

生成区块链账户地址

为了收款方便,用户需要对外公布一个地址,这个地址其实是公钥经过一系列变化得来的。比如:比特币公钥到地址的变化过程,一个公钥经过SHA256+RIPEMD160两次叠加运算得到公钥hash,在公钥hash前防止版本号0x00,在经过SHA256后取前四个字节得到校验和checksum,将版本号+公钥+校验连接在一起,再经过base58编码,最终得到比特币地址。 ```go // Base58Decode decodes Base58-encoded data func Base58Decode(input []byte) []byte { result := big.NewInt(0) zeroBytes := 0

for b := range input {
    if b == 0x00 {
        zeroBytes++
    }
}

payload := input[zeroBytes:]
for _, b := range payload {
    charIndex := bytes.IndexByte(b58Alphabet, b)
    result.Mul(result, big.NewInt(58))
    result.Add(result, big.NewInt(int64(charIndex)))
}

decoded := result.Bytes()
decoded = append(bytes.Repeat([]byte{byte(0x00)}, zeroBytes), decoded...)

return decoded

} ``` 在main函数中调用它

go func main1() { val := Base58Decode([]byte("1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa")) fmt.Printf("%x,%d\n", val, len(val)) fmt.Printf("%x, %x\n", val[1:21], val[21:]) hash1 := sha256.Sum256(val[:21]) hash2 := sha256.Sum256(hash1[:]) fmt.Printf("%x\n", hash2[:4]) }

将私钥生成和地址生成结合起来实现比特币地址的生成。

1、构造钱包结构

我们先构造一个钱包结构,钱包包含用户的公钥和私钥。

```go // 钱包结构 type Wallet struct { PrivateKey ecdsa.PrivateKey //私钥 PublicKey []byte //公钥 }

// 创建钱包 func NewWallet() *Wallet { //随机生成秘钥对 private, public := newKeyPair() wallet := Wallet{private, public} return &wallet }

```文章来源地址https://www.toymoban.com/news/detail-819422.html

2、计算hash和ripemd160

为了获得地址,首先要对公钥进行hash运算,之后计算ripemd160

```go //计算公钥hash func HashPubKey(pubKey []byte) []byte { //1. 先hash一次 publicSHA256 := sha256.Sum256(pubKey) //2. 计算ripemd160 RIPEMD160Hasher := ripemd160.New() RIPEMD160Hasher.Write(publicSHA256[:])

publicRIPEMD160 := RIPEMD160Hasher.Sum(nil) //导包就行

return publicRIPEMD160

} ```

3、计算校验和

获得hash后,就可以计算校验和了,实现一个checksum函数,计算两次hash。 //计算校验和,输入为0x00+公钥hash ```go const version = byte(0x00)

const ChecksumLen = 4 func checksum(payload []byte) []byte {

firstSHA := sha256.Sum256(payload)
secondSHA := sha256.Sum256(firstSHA[:])

return secondSHA[:ChecksumLen]

}

```

4、生成地址

生成地址就是把步骤2和3的功能加上base58编码,就可以获得地址了。

```go //生成地址 func (w Wallet) GetAddress() []byte { //1. 计算公钥hash pubKeyHash := HashPubKey(w.PublicKey) //2. 计算校验和 versionedPayload := append([]byte{version}, pubKeyHash...) checksum := checksum(versionedPayload) //3. 计算base58编码 fullPayload := append(versionedPayload, checksum...) address := Base58Encode(fullPayload)

return address

}

```

5、地址生成测试

```go func main() { //1. 构造钱包 wallet := NewWallet() //2. 生成地址 address := wallet.GetAddress() fmt.Printf("%s\n", address) }

```

到了这里,关于GO语言-生成区块链账户地址的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .NET Core 离线生成 Tron 波场私钥和地址笔记

    波场(Tron)钱包设置多签 波场(Tron)网页版(本地)钱包开源 波场(Tron)项目常用工具分享 波场(Tron)离线签名、广播交易笔记 波场(Tron)离线生成私钥和地址笔记

    2023年04月13日
    浏览(40)
  • 以太坊账户地址与比特B地址生成方法对比

    作者 张群(赛联区块链教育首席讲师,工信部赛迪特聘资深专家,CSDN认证业界专家,微软认证专家,多家企业区块链产品顾问)关注张群,为您提供一站式区块链技术和方案咨询。 以太坊和比特B地址在生成方式和结构上有一些关键的不同,这些不同反映了两个区块链平台的

    2024年01月24日
    浏览(31)
  • Java sdk使用加载账户私钥调用合约

    1.2 智能合约的流程 1.2 智能合约详细代码 实现了一个简单的商店功能。它定义了三个结构体:用户、商家和商品,以及对应的映射关系。它提供了一些方法用于注册用户和商家,创建商品,更新用户余额,购买商品等等。它还包括一些修饰符,用于限制只有用户或商家可以调

    2023年04月16日
    浏览(28)
  • 区块链当中Bitcoin的Segwit地址生成原理

     Segwit地址又称隔离见证地址。在Bitcoin Blockchain上,经常可以看到类似 bc1qmy63mjadtw8nhzl69ukdepwzsyvv4yex5qlmkd 这样的以 bc 开头的地址,这种地址就是隔离见证地址。 Segwit地址有好几种,一种是以 3 开头的隔离见证兼容地址(Nested Segwit Address),从该地址上无法区分到底是多签地址

    2024年01月23日
    浏览(31)
  • 【区块链】usdt充值 离线签名 离线生成地址

    前两天老同事找到我诉苦:川哥,前段时间产品不知道抽什么风想搞个USDT充值,说什么要与时俱进,与国际接轨。。。。。我tm都研究了两周了都没搞清楚这玩意到底是干嘛的,网上代码不是不全就是缺jar包的,现在搞得我都想rm -rf /*了。。 好家伙,兄弟别冲动啊。。我心想

    2024年02月02日
    浏览(32)
  • 【区块链 | 智能合约】Ethereum源代码 - 智能合约地址生成算法

    当提交智能合约部署后,会返回智能合约的地址。智能合约地址的生成逻辑在eth.api.go的submitTransaction函数中:

    2024年02月13日
    浏览(40)
  • go语言--区块链学习(一)

    温馨跳转链接:模块二:go语言–区块链学习(二)-CSDN博客 1.1 密码介绍 1.1.1 为什么要加密 ? 保护隐私和数据安全:在信息传输过程中,不加密的数据可以被未经授权的人员截获和查看,这可能导致个人隐私泄露、商业机密被窃取或者敏感数据被篡改。通过加密数据,可以

    2024年01月21日
    浏览(32)
  • go语言简单实现区块链

            在本文中,我们将使用Go语言来实现一个简单的区块链系统,包括区块生成、交易处理和区块打印、保存区块链等功能。 在开始之前,先确保计算机上安装了以下内容: Go编程语言:您可以从Go官方网站下载并安装Go。 Go开发环境:设置Go开发环境,包括文本编辑器

    2024年04月16日
    浏览(28)
  • 使用Go语言搭建区块链基础

    随着区块链技术的发展,越来越多的人开始关注并使用这一技术,其中,比特币和以太坊等区块链项目正在成为人们关注的焦点。而Go语言作为一种高效、简洁的编程语言,越来越多的区块链项目也选择使用Go语言来搭建其底层基础。本文将介绍如何使用Go语言搭建区块链的基

    2024年02月04日
    浏览(26)
  • Go语言Blockchain与区块链

    区块链技术是一种分布式、去中心化的数字账本技术,它允许多个节点共同维护一个共享的、有序的、不可篡改的数据库。区块链技术的核心概念是通过加密技术和分布式共识算法来确保数据的安全性、完整性和可靠性。 Go语言是一种静态类型、垃圾回收、并发简单的编程语

    2024年02月20日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包