Solidity
混音警告:斷言
我正在嘗試在 remix 上編譯契約並遇到以下警告:
如果您永遠不希望x為假,請使用assert(x),而不是在任何情況下(除了程式碼中的錯誤)。如果x可能為假,則使用 require(x) ,例如無效輸入或外部組件故障。
我的程式碼中使用斷言的部分是:
assert(checkPlayerExists(msg.sender) == false); assert(number >= 1 && number <= 10); assert(msg.value >= minimumBet);
希望有人解釋一下,因為它似乎有點神秘。
這是一種誤用,
assert
因為根據輸入,表達式的計算結果可能為false
. 改為使用require()
。
assert()
旨在檢查契約本身的邏輯錯誤。斷言在任何情況下都必須始終為真的事實,因此任何錯誤的可能性都是邏輯問題。考慮:
uint balanceAlice = 10; uint balanceBob = 5; uint conserveFunds = balanceAlice + balanceBob; // do stuff uint conservedFunds = balanceAlice + balanceBob; // whatever we did, we should always end up with the same funds accounted for. // ANY departure from this principal means the contract contains a logic error. assert(conserveFunds == conservedFunds)
希望能幫助到你。