5

如何在 Postgres 中创建 uint256 数据类型?看起来它们本机只支持最多 8 个字节的整数..

它们提供具有用户指定精度的小数和数字类型。对于我的应用程序,值是钱,所以我假设我会使用数字而不是十进制,或者这没关系吗?

NUMERIC(precision, scale)

那我会用NUMERIC(78, 0)吗?(2^256 是 78 位)还是我需要NUMERIC(155, 0)强制它始终 >= 0(2^512,155 位,额外的位代表符号)?或者我应该使用十进制吗?

4

2 回答 2

7

numeric(78,0)最大值为 9.999... * 10^77 > 2^256 就足够了。

于 2019-06-13T13:46:27.583 回答
1

您可以创建一个域。

CREATE DOMAIN uint_256 AS NUMERIC NOT NULL
CHECK (VALUE >= 0 AND VALUE < 2^256)
CHECK (SCALE(VALUE) = 0)

这将创建一个可重用的uint_256数据类型,该数据类型被限制在2^256限制范围内,并且还通过仅允许数字的小数位数为 0 来防止舍入错误(即,使用十进制值引发错误)。在 Solidity中没有任何东西NULL,因此数据类型不应为空。

试试看:dbfiddle

于 2021-10-04T19:38:55.483 回答