Exchanges
是否值得在數據庫中以全精度儲存乙太幣?
Ether 的精度為 10^18,這使得無法在數據庫中使用 BIGINT 類型將值儲存在 weis 中:應該使用 DECIMAL 類型。
- 在 Gwei 中儲存值是否值得以損失一些精度為代價留在 BIGINT 中?什麼可能是負面影響?
- 交易所、託管錢包的行業最佳實踐是什麼?從 API 文件看來,Binance 使用了小數點後 8 位數字。
正如評論者正確指出的那樣,這完全取決於您要實現的目標。
您可以並且可能應該儲存全精度字元串,以便您擁有所有有效數字,即準確的資訊。在放棄準確性時,您通常應該有充分的理由說明您不需要它並且永遠不會需要它。
如果您計劃執行任何鏈下操作(例如加法、乘法、除法),丟棄精度會並且確實會導致錯誤的傳播——您會發現沒有辦法在鏈下準確地做這些事情,您必須依賴發現真相的鏈上合約。
在數據庫中將數字視為字元串可能意味著不便或無法在數據庫級別執行數學運算,但如果您首先考慮不准確的資訊,則無論如何這可能不是一個選擇。如果您有準確的資訊(如字元串),則可以依靠 BigNumber 庫來解釋和使用儲存的值,而不會損失精度。
最後,這取決於您要使用數據庫的目的。舉個簡單的例子,如果使用者想要清空他們的帳戶並且他們依賴於來自您的數據庫的數字,那麼他們將不會擁有所有有效數字並且可能會在他們的帳戶中留下“灰塵”。四捨五入會產生過高的數字和失敗的事務。該問題的解決方案是一個完整、準確的數字。
希望能幫助到你。
對於完全依賴區塊鍊網路的相同要求,我有一個替代方案。
在這裡,我們試圖儲存一個在乙太坊歷史上的任何時間點都可以公開獲取、可讀的值。
我要做的不是儲存餘額
方法:
- 儲存交易雜湊
使用該交易雜湊來獲取塊號
獲取該塊中帳戶的餘額。
- 儲存您需要餘額的日期時間
使用該日期時間值來獲取帳戶的餘額..
參考這個連結…