好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > go語言實戰(zhàn)之實現比特幣地址校驗步驟

go語言實戰(zhàn)之實現比特幣地址校驗步驟

熱門標簽:阿克蘇地圖標注 excel地圖標注分布數據 涿州代理外呼系統(tǒng) 外呼系統(tǒng)顯本地手機號 百度地圖標注后傳給手機 評價高的400電話辦理 壽光微信地圖標注 電話機器人軟件免費 外呼系統(tǒng)用什么卡

由公鑰生成比特幣地址步驟

  1. 隨機取一個32位隨機數作為私鑰
  2. 利用生產的隨機數采用橢圓加密算法生成公鑰
  3. 計算公鑰的sha256哈希值
  4. 計算RIPEMD-160哈希值
  5. 第4步結果加上版本號(比特幣為0x00)
  6. 對第5步結果取兩次sha256哈希值
  7. 取上一步結果的前四個字節(jié)
  8. 將第7步結果加到第步的結果后面作為校驗
  9. 利用base58對第8步結果進行變化得到地址

生成地址代碼如下

func (w Wallet) GetAddress() []byte {
    pubKeyHash := HashPubKey(w.PublicKey)

    versionedPayload := append([]byte{version}, pubKeyHash...)
    checksum := checksum(versionedPayload)

    fullPayload := append(versionedPayload, checksum...)
    address := Base58Encode(fullPayload)

    return address
}
func HashPubKey(pubKey []byte) []byte {
    publicSHA256 := sha256.Sum256(pubKey)

    RIPEMD160Hasher := ripemd160.New()
    _, err := RIPEMD160Hasher.Write(publicSHA256[:])
    publicRIPEMD160 := RIPEMD160Hasher.Sum(nil)

    return publicRIPEMD160
}

func checksum(payload []byte) []byte {
    firstSHA := sha256.Sum256(payload)
    secondSHA := sha256.Sum256(firstSHA[:])

    return secondSHA[:addressChecksumLen]
}

校驗比特幣

地址是否正確代碼

addressChecksumLen:=4
func ValidateAddress(address string) bool {
    pubKeyHash := Base58Decode([]byte(address))
    actualChecksum := pubKeyHash[len(pubKeyHash)-addressChecksumLen:]
    version := pubKeyHash[0]
    pubKeyHash = pubKeyHash[1 : len(pubKeyHash)-addressChecksumLen]
    targetChecksum := checksum(append([]byte{version}, pubKeyHash...))
    return bytes.Compare(actualChecksum, targetChecksum) == 0
}

Base58Decode是對比特幣地址進行解碼,然后取后四位校驗位actualChecksum,利用去掉校驗位的pubKeyHash再次算出校驗位與地址的校驗位做出對比,即可驗證地址的正確性。 其中用到的函數有:

func checksum(payload []byte) []  //利用兩次shah256求校驗位
 byte {
    firstSHA := sha256.Sum256(payload)
    secondSHA := sha256.Sum256(firstSHA[:])

    return secondSHA[:addressChecksumLen]
}

這是解碼的函數,已經有不少現有的代碼支持,故不作講解

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
}

以上就是go語言實戰(zhàn)之實現比特幣地址校驗步驟的詳細內容,更多關于go語言比特幣地址校驗的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • golang gin框架獲取參數的操作
  • golang gin 框架 異步同步 goroutine 并發(fā)操作
  • go語言 xorm框架 postgresql 的用法及詳細注解
  • goland 搭建 gin 框架的步驟詳解
  • GO語言gin框架實現管理員認證登陸接口
  • Go語言框架Beego項目搭建的方法步驟
  • Go語言快速入門圖文教程
  • 詳解Go語言微服務開發(fā)框架之Go chassis

標簽:汕頭 吐魯番 蘭州 梅河口 雞西 銅川 重慶 欽州

巨人網絡通訊聲明:本文標題《go語言實戰(zhàn)之實現比特幣地址校驗步驟》,本文關鍵詞  語言,實戰(zhàn),之,實現,比特,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《go語言實戰(zhàn)之實現比特幣地址校驗步驟》相關的同類信息!
  • 本頁收集關于go語言實戰(zhàn)之實現比特幣地址校驗步驟的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 啊啊好大好深| 无码人妻一区二区三区| 韩国色情巜肉欲办公室2| 久久久久欧美精品无码| 97视频免费在线观看| 原神涩涩同人??爽网站 | 我把护士日出水了视频| 黑人系列| 无码毛片一区二区三区人口-百度| 坐在学长棒棒上做作业| 最刺激的交换夫妇中文字幕| 用舌头清理主人屁股| 自慰看的小黄说| 英语老师的小兔子又白又软| 麻豆精品永久免费视频| 欧美人与禽zoz0视频在线观看| 一线天在线观看| 二婶免费观看完整版电视剧| 夜色福利站www国产在线观看| 国产肉丝美脚一区二区三区视频| 用力日我| 欧美毛片一级A片免费播放巨人| 国产东北人一级A片大全| 二人做受一级A片西门庆和潘金莲| 在线午夜限制影片| 农村寡妇女人一级毛片| 一本久道久久综合狠狠| 鞠婧祎脱得一二净无内裤全身| 超级碰碰青草久热国产| 高辣高h全肉| 夜色爽爽| 蜜桃成熟时33d国粤双语| 猛乳3p市来美保天国在线观看| 免费看一级| 里番acg本子| 男人勃不起来是怎么回事| (高H)闺蜜| 青青青手机在线观看| 欧美aaaa在线观看视频免费| 韩国A片巜善良的秘书的目的在线| 王语纯尤妮丝自慰av|