Tx 的 output 里只有 args 和 code_hash,如何对应到 address?

rt,官方的 explorer 给出 block hash 是能对应到 address 的,但是 rpc 接口里没发现有这个方法,请问应该怎么对应?

根据 Block hash 是可以获取到整个 block 的完整信息,其中就包含了 Cellbase 交易,也就是出块奖励,该交易的 Output 中包含出块人的 args 和 code_hash 信息,根据这两个数据就可以计算出矿工的地址。

地址是通过 blake160(也就是args) 算出来的, 使用的比特币社区提出的 Bech32算法

代码参考:

// https://github.com/liushooter/ckb-wallet-golang/blob/v0.2.1/wallet.go#L75-L94

func genCkbAddr(blake160Addr []byte, prefix string) string {

	typebin, _ := hex.DecodeString("01")
	flag := []byte("P2PH")

	payload := append(typebin, flag...)
	payload = append(payload, blake160Addr...)

	converted, err := bech32.ConvertBits(payload, 8, 5, true)
	if err != nil {
		panic(err)
	}

	addr, err := bech32.Encode(prefix, converted)
	if err != nil {
		panic(err)
	}

	return addr
}

多谢指点!我打算做个简单的测试挖矿排行试试

1 Like

:+1: 我也想了解下这方面的数据

如何获取最新爆块的矿工地址啊?查看浏览器是通过第一个交易的witness字段解析的,有没有go的实现方式?