Hello , 我是09

此篇内容为我2018~2020年在【库神】工作时,对部分重要知识做的学习总结

随着比特币冲破10万美金,行业又再次兴起,希望相关从业者可以学习到你需要的内容

介绍

模型

和比特币一样属于UTXO系列

官网:

https://www.cardano.org/zh/home-3/

论坛:

https://forum.cardano.org

浏览器:

https://cardanoexplorer.com

https://cardanoexplorer.com

cbor序列化数据查看:

用于查看序列化数据的详细内容 http://cbor.me/

Image-mrbg.png

github:

https://github.com/input-output-hk

共识算法Ouroboros

https://zhuanlan.zhihu.com/p/33824015

签名算法:ed25519

地址生成

Address(cbor):
[
    [                                                    # Address (as CBOR data item)
        h'C61F822357B7F4A48CB9...A7C602C4A7856A6',           # Root
        {                                                    # Attributes
            0: h'8200581CFC310...F678BD553206AC4',               # StakeDistribution
            1: h'49EB93EC6B3A6205311D'                           # PkDerivationPath
        },
        0                                                    # AddrType
    ],
    3948132476                                           # Checksum
]

where:

  • Root - address root,

  • Attributes - map with address attributes (currently: stake distribution and derivation path),

  • AddrType - type of an address,

  • Checksum - CRC32 checksum of an address.

测试数据:

msgFirst = "{\"wallet_id\":\"0221316b61bf\",\"path\":\"m/44'/1815'/0'\",\"out_total\":2,\"in_total\":2}";

msgBean = "{\"start_index\":0,\"vin\":[{\"prev_hash\":\"4806BBDFA6BBBFEA0443AB6C301F6D7D04442F0A146877F654C08DA092AF3DD8\",\"prev_index\":15440,\"value\":33208426245162773},{\"prev_hash\":\"60FC8FBDD6FF6C3B455D8A5B9F86D33F4137C45ECE43ABB86E04671254E12C08\",\"prev_index\":31371,\"value\":1082080442928567}]}";

msgBean_out = "{\"start_index\":0,\"vout\":[{\"address\":\"BDHJBaaLRuJoaXR7USuHDyFgoBWnaaaA88EMu8aH9wcR9BB4XmgAtmVfZNvNThsnXdgNwr1MaLG1AaBu9riCZaTMaBnoGzshgs7CHi4P3YKqBFioMne92Ym4LgLG9wDuiA\",\"value\":33208426245162773},{\"address\":\"3XsWSbV7z5bxQVv3YScPKuv6AQbNswgu4phHXmqcnQDnt9QC1WkrnvHsLkRxQVcPE78iXVUymMhYx72EL9jDFfvjhrerXQqc2Y31ab5pLhhfWcfbKwQNXzmdcZZuFR6cJecqSvjeVSU3pG4L\",\"value\":1082080442928567}]}";

将测试数据进行序列化后:

82839F8200D81858268258204806BBDFA6BBBFEA0443AB6C301F6D7D04442F0A146877F654C08DA092AF3DD8193C508200D818582682582060FC8FBDD6FF6C3B455D8A5B9F86D33F4137C45ECE43ABB86E04671254E12C08197A8BFF9F8282D818585583581CE6E37D78F4326709AF13851862E075BCE800D06401AD5C370D4D48E8A20058208200581C23F1DE5619369C763E19835E0CB62C255C3FCA80AA13057A1760E804014F4E4CED4AA010522E84B8E70A121894001AE41EF3231B0075FAE341E487158282D818585F83581CFD9104B3EFB4C7425D697EEB3EFC723EF4FF469E7F37F41A5AFF78A9A20058208200581C53345E24A7A30EC701611C7E9D0593C41D6EA335B2EB195C9A0D2238015818578B485ADC9D142B1E692DE1FD5929ACFC5A31332938F192011AD0FCDC751B0003D8257C6B4DB7FFA0818200D818588582584040927DDDDBD418BAA308418F3A00DAF750C0B51555C4C52BB8A584C349973D8BC183B5FA73306B5A3687B7C3DE662F764E478960214BBF529178FF306E293DB858408F257243204B7879E137F88FE3ABF58C9F5EAA5D168E2D569D3CF7A13EA9AEE3DA158585E07EFEF20052C974EB6BBE8DA208A339269CC0D7851F22194FF91B0F

序列化数据分析(cbor编码):

82                                      # array(2) 两个元素(tx、sig)
83                                      # array(3) tx三个元素(input、output、attr)
9F                                      # array(*) input元素个数不限,以FF为结尾标志
82                                      # array(2) input[1]两个元素(InType、list)
00                                      # unsigned(0) intype 0
D8 18                                   # tag(24) byte string
58 26                                   # bytes(38) 长度                                    
82                                      # array(2) item两个元素
58 20                                   # bytes(32) TxId长度

4806BBDFA6BBBFEA0443AB6C301F6D7D04442F0A146877F654C08DA092AF3DD8 TxId
19 3C50                                 # unsigned(15440) TxOutputIndex
82                                      # array(2) input[2]两个元素(InType、list)
00                                      # unsigned(0) intype 0
D8 18                                   # tag(24) byte string
58 26                                   # bytes(38) 长度
82                                      # array(2) item两个元素
58 20                                   # bytes(32) TxId长度

60FC8FBDD6FF6C3B455D8A5B9F86D33F4137C45ECE43ABB86E04671254E12C08 TxId
19 7A8B                                 # unsigned(31371) TxOutputIndex
FF                                      # primitive(*)   input结束标志
9F                                      # array(*)   output元素个数不限,以FF为结尾标志
82                                      # array(2)   output[1]两个元素(Address、Amount)
82                                      # array(2)   Address两个元素(address、Checksum)
D8 18                                   # tag(24)   byte string
58 55                                   # bytes(85)   长度
83                                      # array(3)   address三个元素(Root、Attributes、AddrType)
58 1C                                   # bytes(28)    Root长度
E6E37D78F4326709AF13851862E075BCE800D06401AD5C370D4D48E8 Root

A2                                     # map(2)    Attributes两组键值对
00                                     # unsigned(0)    键:0
58 20                                  # bytes(32)    StakeDistribution长度
8200581C23F1DE5619369C763E19835E0CB62C255C3FCA80AA13057A1760E804 value
01                                     # unsigned(1)     键:1
4F                                     # bytes(15)     StakeDistribution长度
4E4CED4AA010522E84B8E70A121894     value
00                                     # unsigned(0)     AddrType
1A E41EF323                            # unsigned(3827233571)    Checksum
1B 0075FAE341E48715                    # unsigned(33208426245162773) Amount
82                                     # array(2)    output[2]两个元素(Address、Amount)
82                                     # array(2)    Address两个元素(address、Checksum)
D8 18                                  # tag(24)    byte string
58 5F                                  # bytes(95)    长度
83                                     # array(3)    address三个元素(Root、Attributes、AddrType)
58 1C                                  # bytes(28)    Root长度
FD9104B3EFB4C7425D697EEB3EFC723EF4FF469E7F37F41A5AFF78A9 Root
A2                                     # map(2)    Attributes两组键值对
00                                     # unsigned(0)    键:0
58 20                                  # bytes(32)    StakeDistribution长度

8200581C53345E24A7A30EC701611C7E9D0593C41D6EA335B2EB195C9A0D2238 value
01                                     # unsigned(1)    键:1
58 18                                  # bytes(24)    StakeDistribution长度

578B485ADC9D142B1E692DE1FD5929ACFC5A31332938F192 value
01                                    # unsigned(1)    AddrType
1A D0FCDC75                           # unsigned(3506232437)   Checksum
1B 0003D8257C6B4DB7                   # unsigned(1082080442928567) Amount
FF                                    # primitive(*)    output结束标志
A0                                    # map(0)    Attributes(为空)
81                                    # array(1)    sig一个元素
82                                    # array(2)    list内容(type、xpub_sign)
00                                    # unsigned(0)    type
D8 18                                 # tag(24)    byte string
58 85                                 # bytes(133)    byte string长度
82                                    # array(2)    xpub_sign两个元素(xpub、sign)
58 40                                 # bytes(64)    xpub长度                  40927DDDDBD418BAA308418F3A00DAF750C0B51555C4C52BB8A584C349973D8BC183B5FA73306B5A3687B7C3DE662F764E478960214BBF529178FF306E293DB8 xpub

58 40                                 # bytes(64)    sign长度                  8F257243204B7879E137F88FE3ABF58C9F5EAA5D168E2D569D3CF7A13EA9AEE3DA158585E07EFEF20052C974EB6BBE8DA208A339269CC0D7851F22194FF91B0F sign

注意:红色部分的序列化(涉及xpub和signature)不保证正确,需要进一步上链广播验证

xpub = pubkey+chaincode

[
    [
        [
            [
                0,
                [
                    h'4806BBDFA6BBBFEA0443AB6C301F6D7D04442F0A146877F654C08DA092AF3DD8',
                    15440
                ]
            ],
            [
                0,
                [
                    h'60FC8FBDD6FF6C3B455D8A5B9F86D33F4137C45ECE43ABB86E04671254E12C08',
                    31371
                ]
            ]
        ],

        [
            [
                [
                    [
                        h'E6E37D78F4326709AF13851862E075BCE800D06401AD5C370D4D48E8',
                        {
                            0:8200581C23F1DE5619369C763E19835E0CB62C255C3FCA80AA13057A1760E804,
                            1:4E4CED4AA010522E84B8E70A121894
                        },
                        0
                    ],
                    3827233571
                ],
                33208426245162773
            ],
            [
                [
                    [
                        h'FD9104B3EFB4C7425D697EEB3EFC723EF4FF469E7F37F41A5AFF78A9',
                        {
                            0:8200581C53345E24A7A30EC701611C7E9D0593C41D6EA335B2EB195C9A0D2238,
                            1:578B485ADC9D142B1E692DE1FD5929ACFC5A31332938F192
                        },
                        1
                    ]
                    3506232437
                ],
                1082080442928567
            ]
        ],
        {}
    ],
    [
        [
        0,
            [
               h'40927DDDDBD418BAA308418F3A00DAF750C0B51555C4C52BB8A584C349973D8BC183B5FA73306B5A3687B7C3DE662F764E478960214BBF529178FF306E293DB8',
               h'8F257243204B7879E137F88FE3ABF58C9F5EAA5D168E2D569D3CF7A13EA9AEE3DA158585E07EFEF20052C974EB6BBE8DA208A339269CC0D7851F22194FF91B0F'
            ]
        ]
    ]
]