Hello , 我是09

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

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

币种简介:

恒星币是一种能够迅速确认交易的支付网络,它的交易确认时间在几秒以内完成,因此具有简便易行快捷的特点。在恒星支付网络中,用户使用恒星币作为基础货币。用户可以通过XLM转账任意一种货币,包括美元、人民币、欧元、日元,或者是比特币等等。

恒星币(Stellar),一个由前瑞波币(Ripple)创始人Jed McCaleb发起的数字货币项目,用于搭建一个数字货币与法定货币之间传输的去中心化网关。将通过免费发放的形式提供给用户,其供应上线为1000亿,其中95%数量的恒星币用于免费发放。 

供应量:104,363,617,748XLM,然而,每年都有百分之一的通货膨胀率。这意味着新的xlm每年以1%的速率添加到网络中。

Stellar使用ed=d25519签名方案和32字节公钥作为加密地址。

官方网址:

https://www.stellar.org/

浏览器:

https://stellarchain.io

https://stellar.expert/explorer/public/

https://steexp.com

源代码:

https://github.com/stellar

交流区:

https://stellarcommunity.org

https://galactictalk.org

签名算法:ed25519

签名:是对hash数据进行签名

地址生成

size_t stellar_publicAddressAsStr(const uint8_t bytes, char out, size_t outlen)
{
    // version + key bytes + checksum
    uint8_t keylen = 1 + 32 + 2;
    uint8_t bytes_full[keylen];
    bytes_full[0] = 6 << 3; // 'G'
    memcpy(bytes_full + 1, bytes, 32);

    // Last two bytes are the checksum
    uint16_t checksum = stellar_crc16(bytes_full, 33);
    bytes_full[keylen-2] = checksum & 0x00ff;
    bytes_full[keylen-1] = (checksum>>8) & 0x00ff;
    base32_encode(bytes_full, keylen, out, outlen, BASE32_ALPHABET_RFC4648);

    // Public key will always be 56 characters
    return 56;
}

bytes为压缩公钥去掉前缀(32字节)

待hash原始数据分段解析

sha256 network_hash(sha256 network_passphrase)
sha256 { 0x00, 0x00, 0x00, 0x02 }
sha256 (0 32bits)
sha256 (pubkey 32 bytes)
sha256 (fee 32bits)
sha256 (sequence number 64bits)
(has timebound)
{
        stellar_hashupdate_bool(true); sha256

        // Timebounds are sent as uint32s since that's all we can display, but they must be hashed as
        // 64-bit values
        stellar_hashupdate_uint32(0); sha256
        stellar_hashupdate_uint32(msg->timebounds_start); sha256
        stellar_hashupdate_uint32(0); sha256
        stellar_hashupdate_uint32(msg->timebounds_end); sha256
}
else
{
        hash256 (0 32bits)
}

sha256 (memo_type 32bits)
    switch (msg->memo_type) {
        // None, nothing else to do
        case 0:
            break;

        // Text: 4 bytes (size) + up to 28 bytes
        case 1:
            sha256 (lens 32bits)
            sha256(text,个数为4的倍数,不够补0)
            break;
    }

sha256  (num_operations 32bits)
sha256  (false 32bits,表示没有source account)
sha256  (operation type 32bits,1表示payment)
sha256 (0 32bits)
sha256 (pubkey 32 bytes receipt)
sha256 (32bits,when XLM asset->type = 0  )
sha256 (amount 64bits)
sha256 (0 32bits) 表示sha结束

//数据序列化结果
0000000066AF688FD138A9250DE2D3EE8CAE72A8D3EFE97FF6B0D9275BD6C2092B41A226000000640121E532000042D500000000000000010000000677656978696E0000000000010000000000000001000000003AA0A99247E062EE1E968EF57716DFB7868DD6614FA16972C67D894242FFBB7C0000000158595A0000000000A071C74A90AADA2CB7D8B4D514976A49422D356400DDB84B033AAB9B83B42516000000002EC0F44700000000000000012B41A226000000408F5A3EB27F1B906AE16E682C6F21D05B13E23C4BD0AB893E7998688CC9DD2F1A26C934B471FBB1587352EE1997FDAA5331FE2A19E77F66D622F54732F1115901

//序列化数据解析
00000000  //First 4 bytes of an address are the type. There's only one type (0)

66AF688FD138A9250DE2D3EE8CAE72A8D3EFE97FF6B0D9275BD6C2092B41A226 //public key
00000064  //fee(100)
0121E532000042D5 //sequence number
00000000  //No timebounds
00000001  //memo type
00000006  //string len
77656978696E0000  //string 长度是4的整数倍,不够时填充0
00000001  //number of operations 1(操作的数量,操作类似于类型)
00000000  //no source account(正常不需要source account)
00000001  //Payment(交易类型)
00000000  //First 4 bytes of an address are the type. There's only one type (0)

3AA0A99247E062EE1E968EF57716DFB7868DD6614FA16972C67D894242FFBB7C  //receipt address pubkey
00000001  //4-character asset code asset type
58595A00  //asset code
00000000  //First 4 bytes of an address are the type. There's only one type (0)

A071C74A90AADA2CB7D8B4D514976A49422D356400DDB84B033AAB9B83B42516  //asset address pubke
000000002EC0F447  //amount
00000000  //4 null bytes
00000001  //has signature
2B41A226  //pubkey Last 4 bytes
00000040  //64

8F5A3EB27F1B906AE16E682C6F21D05B13E23C4BD0AB893E7998688CC9DD2F1A26C934B471FBB1587352EE1997FDAA5331FE2A19E77F66D622F54732F1115901  //signature

//base64
AAAAAGavaI/ROKklDeLT7oyucqjT7+l/9rDZJ1vWwgkrQaImAAAAZAEh5TIAAELVAAAAAAAAAAEAAAAGd2VpeGluAAAAAAABAAAAAAAAAAEAAAAAOqCpkkfgYu4elo71dxbft4aN1mFPoWlyxn2JQkL/u3wAAAABWFlaAAAAAACgccdKkKraLLfYtNUUl2pJQi01ZADduEsDOqubg7QlFgAAAAAuwPRHAAAAAAAAAAErQaImAAAAQI9aPrJ/G5Bq4W5oLG8h0FsT4jxL0KuJPnmYaIzJ3S8aJsk0tHH7sVhzUu4Zl/2qUzH+Khnnf2bWIvVHMvERWQE=

base-64 XDR数据解析:
https://www.stellar.org/laboratory#xdr-viewer?type=TransactionEnvelope&network=public

Image-oitw.png