caivega / ipfslib

Other
2 stars 1 forks source link

S2 - 发行代币,如果total_supply设得很大,则发行后的数值会发生变化 #161

Closed foreso-GitHub closed 3 years ago

foreso-GitHub commented 3 years ago

发行代币,如果total_supply设得很大,则发行后total_supply的数值会发生变化。 推测原因是total_supply的类型发生变化,数值太大后溢出了。

版本:v0.5.3-dev-20201229-549e506fdf4556bc9bfd675559fd201421bd3036 昨天以前的版本没有这个问题。

TestCase:

请求:

{
    "jsonrpc": "2.0",
    "id": 6,
    "method": "jt_sendTransaction",
    "params": [
        {
            "from": "jMrxHzpgnLHbz9ve9nVi8mc4SGZ5mkXZk",
            "secret": "ssxdpSif5AAdiazwAdbCxDc53Ykxd",
            "type": "IssueCoin",
            "name": "TestCoin1609220128",
            "symbol": "45feac020",
            "decimals": "8",
            "total_supply": "987654321000000002",
            "local": false,
            "flags": 0
        }
    ]
}

结果:

{
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "TransactionType": "IssueCoin",
        "Flags": 2147483648,
        "Account": "jMrxHzpgnLHbz9ve9nVi8mc4SGZ5mkXZk",
        "Sequence": 37933,
        "Fee": "10",
        "SigningPubKey": "02DE5CB9E730A85E7E58D2C112C5E64D746B6FC3B8A4171D1207CFEF340D2BB3D8",
        "TxnSignature": "304402204F143A70834F284573B9C9B0C1A791F20AB7DC5CA18B37935214ECBD7119ECDB0220518B0EE9F2A7D8E0011B2D1F98E0F6B1FA2A752596AC110B1D4240319E7AFB4A",
        "hash": "2A1D890D917162325C0ABE194F3C09D439820A440948FED4D1136269678145E2",
        "Name": "TestCoin1609220128",
        "Decimals": 8,
        "TotalSupply": {
            "value": "14876801487972866",
            "currency": "45feac020",
            "issuer": "jjjjjjjjjjjjjjjjjjjjjhoLvTp"
        },
        "Owner": "jMrxHzpgnLHbz9ve9nVi8mc4SGZ5mkXZk",
        "date": 662535745,
        "inLedger": 63081,
        "ledger_index": 63081,
        "meta": {}
    }
}
zyd82 commented 3 years ago

测试版本:v0.5.3-dev-20201229-549e506fdf4556bc9bfd675559fd201421bd3036

发币的最大值是2的63次方(即9223372036854775808),在这个版本上如果total_supply是9200000000000000000,或者9.012345678912345678/AAT29(decimals是18),它们都没有超过2的63次方,但是结果都返回“Amount out of range”。

{
    "jsonrpc": "2.0",
    "method": "jt_sendTransaction",
    "params": [
        { 
            "type": "IssueCoin",
            "from": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
            "secret": "shhquPeZm7uQ6Rvjrqn6L2cR6H33u",
            "name": "slkjgs",
            "symbol": "AAT29",
            "decimals": "18",
            "total_supply": "9200000000000000000",
            "local": true,
            "flags": 65536
        }
    ],
    "id": 1
}
{
    "error": {
        "count": 1,
        "description": "The compound error.",
        "information": "1 errors"
    },
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "error": {
                "description": "The transaction is ill-formed.",
                "information": "Amount out of range: false Negative: false Value: 9200000000000000000 Offset: 0",
                "message": {
                    "decimals": "18",
                    "flags": 65536,
                    "from": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
                    "local": true,
                    "name": "slkjgs",
                    "symbol": "AAT29",
                    "total_supply": "9200000000000000000",
                    "type": "IssueCoin"
                }
            },
            "status": -278,
            "type": "temINVALID"
        }
    ],
    "status": 1000,
    "type": "tedCOMPOUND"
}
{
    "jsonrpc": "2.0",
    "method": "jt_sendTransaction",
    "params": [
        { 
            "type": "IssueCoin",
            "from": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
            "secret": "shhquPeZm7uQ6Rvjrqn6L2cR6H33u",
            "name": "slkjgs",
            "symbol": "AAT29",
            "decimals": "18",
            "total_supply": "9.012345678912345678/AAT29",
            "local": true,
            "flags": 65536
        }
    ],
    "id": 1
}
{
    "error": {
        "count": 1,
        "description": "The compound error.",
        "information": "1 errors"
    },
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "error": {
                "description": "The transaction is ill-formed.",
                "information": "Amount out of range: false Negative: false Value: 9012345678912345678 Offset: 0",
                "message": {
                    "decimals": "18",
                    "flags": 65536,
                    "from": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
                    "local": true,
                    "name": "slkjgs",
                    "symbol": "AAT29",
                    "total_supply": "9.012345678912345678/AAT29",
                    "type": "IssueCoin"
                }
            },
            "status": -278,
            "type": "temINVALID"
        }
    ],
    "status": 1000,
    "type": "tedCOMPOUND"
}
caivega commented 3 years ago

测试版本:v0.5.3-dev-20201229-549e506fdf4556bc9bfd675559fd201421bd3036

发币的最大值是2的63次方(即9223372036854775808),在这个版本上如果total_supply是9200000000000000000,或者9.012345678912345678/AAT29(decimals是18),它们都没有超过2的63次方,但是结果都返回“Amount out of range”。

{
    "jsonrpc": "2.0",
    "method": "jt_sendTransaction",
    "params": [
        { 
            "type": "IssueCoin",
            "from": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
            "secret": "shhquPeZm7uQ6Rvjrqn6L2cR6H33u",
            "name": "slkjgs",
            "symbol": "AAT29",
            "decimals": "18",
            "total_supply": "9200000000000000000",
            "local": true,
            "flags": 65536
        }
    ],
    "id": 1
}
{
    "error": {
        "count": 1,
        "description": "The compound error.",
        "information": "1 errors"
    },
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "error": {
                "description": "The transaction is ill-formed.",
                "information": "Amount out of range: false Negative: false Value: 9200000000000000000 Offset: 0",
                "message": {
                    "decimals": "18",
                    "flags": 65536,
                    "from": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
                    "local": true,
                    "name": "slkjgs",
                    "symbol": "AAT29",
                    "total_supply": "9200000000000000000",
                    "type": "IssueCoin"
                }
            },
            "status": -278,
            "type": "temINVALID"
        }
    ],
    "status": 1000,
    "type": "tedCOMPOUND"
}
{
    "jsonrpc": "2.0",
    "method": "jt_sendTransaction",
    "params": [
        { 
            "type": "IssueCoin",
            "from": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
            "secret": "shhquPeZm7uQ6Rvjrqn6L2cR6H33u",
            "name": "slkjgs",
            "symbol": "AAT29",
            "decimals": "18",
            "total_supply": "9.012345678912345678/AAT29",
            "local": true,
            "flags": 65536
        }
    ],
    "id": 1
}
{
    "error": {
        "count": 1,
        "description": "The compound error.",
        "information": "1 errors"
    },
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "error": {
                "description": "The transaction is ill-formed.",
                "information": "Amount out of range: false Negative: false Value: 9012345678912345678 Offset: 0",
                "message": {
                    "decimals": "18",
                    "flags": 65536,
                    "from": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
                    "local": true,
                    "name": "slkjgs",
                    "symbol": "AAT29",
                    "total_supply": "9.012345678912345678/AAT29",
                    "type": "IssueCoin"
                }
            },
            "status": -278,
            "type": "temINVALID"
        }
    ],
    "status": 1000,
    "type": "tedCOMPOUND"
}

9223372036854775808,这个数不好记,就设置成9后边都是0的这种,现在是最大值,也就是(6位小数,对应是9万亿),应该是9后边有18个0

caivega commented 3 years ago

已经修复,下一个build验证

foreso-GitHub commented 3 years ago

版本v0.5.3-dev-20201229-e6b44577a82873fc39752544df05f0d922af079f中,第一个问题已经修复。

@zyd82 东东,你看下你贴的问题,如果也修复了就关闭吧。

zyd82 commented 3 years ago

@caivega , 我comment的问题还没完全修复,表现为2种情况。

第一种情况,发行9000000000000000000个代币,9后面有18个0,这个是目前允许的最大值,理论上应该能够发行成功,但是返回“out of range”。

{
    "jsonrpc": "2.0",
    "method": "jt_sendTransaction",
    "params": [
        { 
            "type": "IssueCoin",
            "from": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
            "secret": "shhquPeZm7uQ6Rvjrqn6L2cR6H33u",
            "name": "slkjgs",
            "symbol": "AAT44",
            "decimals": "6",
            "total_supply": "9000000000000000000",
            "local": true,
            "flags": 131072
        }
    ],
    "id": 1
}
{
    "error": {
        "count": 1,
        "description": "The compound error.",
        "information": "1 errors"
    },
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "error": {
                "description": "The transaction is ill-formed.",
                "information": "error total_supply, out of range",
                "message": {
                    "decimals": "6",
                    "flags": 131072,
                    "from": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
                    "local": true,
                    "name": "slkjgs",
                    "symbol": "AAT44",
                    "total_supply": "9000000000000000000",
                    "type": "IssueCoin"
                }
            },
            "status": -278,
            "type": "temINVALID"
        }
    ],
    "status": 1000,
    "type": "tedCOMPOUND"
}

第二种情况,发行8900000000000000000个代币(89后面有17个0),发行成功,但是余额查询结果是4288313981572612096。

{
    "jsonrpc": "2.0",
    "method": "jt_sendTransaction",
    "params": [
        { 
            "type": "IssueCoin",
            "from": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
            "secret": "shhquPeZm7uQ6Rvjrqn6L2cR6H33u",
            "name": "slkjgs",
            "symbol": "AAT43",
            "decimals": "6",
            "total_supply": "8900000000000000000",
            "local": true,
            "flags": 131072
        }
    ],
    "id": 1
}
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "result": "5688965B09EF2D8873EF178ACB80D090335434F19FEAE2EBCD0BAA7286CB6E65"
        }
    ]
}
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "TransactionType": "IssueCoin",
        "Flags": 2147614720,
        "Account": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
        "Sequence": 103,
        "Fee": "10",
        "SigningPubKey": "034153EEBB406B3593AA7F31A4908E56ED820031DB87F4F2E868FB8E1686D5E1E3",
        "TxnSignature": "304502210091A6A331466985D78B8E20EF7E684675F78221AF87B43C5E5FA47A4FEEDEC64D02201897C11980B5A2C16BEF6D0CF57FB51F88CFD68D1F4F5E9C58CEB7041FD63566",
        "hash": "5688965B09EF2D8873EF178ACB80D090335434F19FEAE2EBCD0BAA7286CB6E65",
        "Name": "slkjgs",
        "Decimals": 6,
        "TotalSupply": {
            "value": "4288313981572612096",
            "currency": "AAT43",
            "issuer": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J"
        },
        "Owner": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
        "date": 662627105,
        "inLedger": 80922,
        "ledger_index": 80922,
        "meta": {
            "AffectedNodes": [
                {
                    "ModifiedNode": {
                        "FinalFields": {
                            "Hash": "0000000000000000000000000000000000000000000000000000000000000000",
                            "Account": "jhCVwTcg5aYWMMdfDmwqYxBr5NMA1PDfyg",
                            "Sequence": 0,
                            "Balance": {
                                "value": "8271190",
                                "currency": "SWT",
                                "issuer": "jjjjjjjjjjjjjjjjjjjjjhoLvTp"
                            }
                        },
                        "LedgerEntryType": "AccountRoot",
                        "PreviousFields": {
                            "Hash": "0000000000000000000000000000000000000000000000000000000000000000",
                            "Account": "jhCVwTcg5aYWMMdfDmwqYxBr5NMA1PDfyg",
                            "Sequence": 0,
                            "Balance": {
                                "value": "8271180",
                                "currency": "SWT",
                                "issuer": "jjjjjjjjjjjjjjjjjjjjjhoLvTp"
                            }
                        }
                    }
                },
                {
                    "ModifiedNode": {
                        "FinalFields": {
                            "Hash": "0000000000000000000000000000000000000000000000000000000000000000",
                            "Account": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
                            "Sequence": 103,
                            "Balance": {
                                "value": "99998969",
                                "currency": "SWT",
                                "issuer": "jjjjjjjjjjjjjjjjjjjjjhoLvTp"
                            }
                        },
                        "LedgerEntryType": "AccountRoot",
                        "PreviousFields": {
                            "Hash": "0000000000000000000000000000000000000000000000000000000000000000",
                            "Account": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
                            "Sequence": 102,
                            "Balance": {
                                "value": "99998979",
                                "currency": "SWT",
                                "issuer": "jjjjjjjjjjjjjjjjjjjjjhoLvTp"
                            }
                        }
                    }
                },
                {
                    "CreatedNode": {
                        "LedgerEntryType": "AccountRoot",
                        "NewFields": {
                            "Hash": "0000000000000000000000000000000000000000000000000000000000000000",
                            "Account": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
                            "Sequence": 103,
                            "Balance": {
                                "value": "4288313981572612096",
                                "currency": "AAT43",
                                "issuer": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J"
                            }
                        }
                    }
                },
                {
                    "CreatedNode": {
                        "LedgerEntryType": "CurrencyRoot",
                        "NewFields": {
                            "Hash": "0000000000000000000000000000000000000000000000000000000000000000",
                            "Flags": 131072,
                            "Account": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J",
                            "Sequence": 1,
                            "Name": "slkjgs",
                            "Decimals": 6,
                            "TotalSupply": {
                                "value": "4288313981572612096",
                                "currency": "AAT43",
                                "issuer": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J"
                            }
                        }
                    }
                }
            ],
            "TransactionIndex": 0,
            "TransactionResult": "tesSUCCESS"
        }
    }
}
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "balance": {
            "value": "4288313981572612096",
            "currency": "AAT43",
            "issuer": "jPdx7mG595P6CowtGYbxRkik9HdWUWtB2J"
        }
    }
}
caivega commented 3 years ago

9000000000000000000(9后边18个0,是最大值,现在是-9000000000000000000 < total_supply < 9000000000000000000, 范围之内,负的是销毁), 等于是不允许的,不行改成?-9000000000000000000 <= total_supply <= 9000000000000000000

caivega commented 3 years ago

8900000000000000000, 这个确实有问题,我看看

zyd82 commented 3 years ago

我跟 @foreso-GitHub 讨论了一下,还是改成 -9000000000000000000 <= total_supply <= 9000000000000000000 吧。

caivega commented 3 years ago

OK

zyd82 commented 3 years ago

v0.5.3-dev-20201231-72973ab08899c404ac4998f2e79c8b5fac0e199e上验证通过。