Contract-Development

自動測試誰可以從智能合約中提取乙太幣

  • July 4, 2020

有什麼方法可以自動測試誰可以從智能合約中提取乙太幣?我需要自動執行此測試。所以我不能手動檢查說明。

我可以設計一個易於測試的智能合約嗎?我想確保只有智能合約的創建者才能通過一個特定的功能提取乙太幣。我可以很容易地測試這個函式是否存在,但是我如何自動測試不存在智能合約的創建者(或任何其他人)可以通過它提取乙太幣的其他函式?

更新

我知道如何設計一個只有創建者才能提取乙太幣的智能合約。但是,我需要自動測試誰可以從給我的智能合約中提取乙太幣。

智能合約可以有很多功能,因此要實現您想要的功能,您必須獨立測試每個功能。您將不得不考慮可以提供給函式的所有可能輸入。

mocha 測試套件中的基本 TypeScript 範例:

describe("my exhaustive test suite", function() {
 it("checks that foo doesn't change the contract balance", async function() {
   const currentBalance: BigNumber = ...
   await myContract.foo();
   const balanceAfterContractCall: BigNumber = ... 
   expect(currentBalance).to.equal(balanceAfterContractCall);
 });
});

請注意,在上面的範例中,測試並沒有特別檢查foo不允許提款 - 它只檢查餘額的相等性。合約呼叫者可以被允許撤回,但會立即退回等量的金額。要徹底檢查這一點,您必須竊聽內部交易

在任何情況下,您可能正在尋找的是形式驗證和符號執行,而不是檢查函式是否執行某項操作的自動化方法。這是一種先進的安全技術,可以在數學上證明程序按照它所說的那樣做。有關更多詳細資訊,請參閱awesome-ethereum-security

創建私有地址變數所有者。在您的建構子中,將您的地址分配為所有者。創建一個名為 isOwner 的修飾符。在提款功能上使用此修飾符,這將自動檢查提款人是否為所有者。

這應該很容易在松露中測試。

我如何自動測試不存在智能合約的創建者(或任何其他人)可以通過其提取乙太幣的其他功能?

只是不要做任何這樣的功能。如果你有然後使用修飾符。

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/34723