sCrypt IDE 0.5.5 支持 UI 調用有狀態合約

繼上次我們推出 sCrypt Deploy 功能後,這次我們新增了調用有狀態合約的功能。

本文以 boilerplate 項目中的 advancedCounter 合約爲例,介紹如何使用這個功能部署和調用合約。

部署合約

AdvancedCounter 合約是一個有狀態的計數器合約,它會在每次成功調用 increment 方法時,將內部狀態值 counter 增加 1。這裏我們將其初始狀態設置爲 00(即從0開始計數),並且合約鎖定的 bsv 餘額使用默認設置 10000 聰。

使用這個方法 部署合約成功之後,會看到左下角的 DEPLOYED CONTRACTS 增加了一個 AdvancedCounter 合約實例。展開該實例的 transactions 子項,可以看到對應的部署交易。

deployed

注意:如果點擊了 Deploy 按鈕後,在運行輸出中看到這個錯誤:Error: Contract description version deprecated, Please update your sCrypt extension to the latest version and recompile,請嘗試執行以下步驟:1.打開合約的 sCrypt 源碼,右鍵運行 Compile to Bitcoin Script 進行再次編譯;2.點擊 COMPILED CONTRACTS 視圖裏的 REFRESH 刷新按鈕;3.關閉並再次打開該合約的部署面板後再次嘗試部署。

調用合約

在上述成功部署的 AdvancedCounter 合約實例中,點擊 increment 方法的 Call 按鈕, 右側出現合約方法調用面板。在該面板上可以看到合約的當前信息,如合約鎖定餘額、當前執行階段、內部狀態等。要調用當前合約方法,還需要根據情況完成以下幾個步驟:

Step 1(必選):填寫調用方法所需的實參。

本合約包括以下幾個參數:

  • txPreimage: 交易原像參數。這裏可以點擊右側的 Preimage 按鈕手動生成;
  • amount:新的合約 UTXO 中鎖定的 bsv 餘額。這裏設置爲 8000 聰;
  • changePKH:找零用的 P2PKH 地址哈希。這裏使用默認設置;
  • changeSats:找零的 bsv 數量。這裏設置爲 1000 聰;

Step 2(可選):定製交易的所有 Output。

如果是無狀態合約,只需要填寫參數值一般就可以了,但是對於有狀態合約,一般會限制合約的輸出腳本,所以需要手動管理所有 Output。目前支持的輸出類型有三種:

  • Stateful Output:有狀態合約的輸出
    • State: 合約狀態的序列化值;
    • Amount: 合約中鎖定的餘額;
  • P2PKH OutputP2PKH 類腳本輸出
    • Address: 收款人地址;
    • Amount: 該輸出中包含的 bsv 數量;
  • OpReturn Outputop_return 類腳本輸出
    • OpReturn: op_return 腳本中的數據部分,asm 格式;
    • Amount: 該輸出中包含的 bsv 數量,一般爲0;

通過 AdvancedCounter 合約的源碼,我們知道調用 AdvancedCounter 合約的交易會產生兩個 Output, 第一個 Output 是一個帶有新狀態的 AdvancedCounter 合約 UTXO;第二個 Output 是一個找零的 P2PKH Output

首先在 Add Output 按鈕左邊的 Output 類型列表中選擇 Stateful Output, 然後點擊 Add Output。之後給這個 Stateful Output 填寫新的狀態: 由於初始狀態是 0,那計數加1後的新狀態是1,故在 State 中輸入 01;餘額 Amount 設置爲 8000 聰,需要與第一步函數參數中的 amount 保持一致;

接下來添加一個找零的 P2PKH Output:在列表中選擇 P2PKH Output,然後點擊 Add Output。其中 Address 可以使用默認值;Amount 設置爲 1000,需要與第一步函數參數中的 changeStas 保持一致。

到此調用參數和 Outputs 就添加完成了。在添加和修改 Output 的過程中,細心的朋友會發上面 txPreimage 參數的值會自動變化。原因是構建交易的 Output 改變時,我們會自動幫你更新原象參數值。當然你也可以手動點擊上面的 Preimage 按鈕進行更新。

Step 3(可選):設置交易相關參數。

Transaction Settings 中包括構建整個交易的若干參數:

  • Fee:交易費用。設置時必須滿足的限制條件是:合約當前的鎖定餘額 Contract Amount = 所有 Output 中的 Amount 之和 + 交易費用 Fee。比如這裏我們使用
    默認值 1000, 加上上面兩個 Output 的輸出餘額 8000 + 1000,剛好等於合約初始化時的餘額 10000。

  • SighashType:交易簽名類型。默認用於計算原象 Preimage 的簽名類型是 ALL ,但是 AdvancedCounter 合約代碼中用於計算原象的的簽名類型是 ANYONECANPAY | ALL,這裏的選擇需要與合約內部一致。注意:修改 SighashType 同樣會自動重新生成原象 txPreimage

Step 4(必選):點擊 Call 按鈕發送交易。

所有設置均完成後點擊 Call 按鈕,會觸發 API 發送這個合約調用交易到測試網。交易發送成功後,我們可以看到頂部顯示合約餘額發生變化,變成剛剛設置的 8000。同樣,可以看到左下角的 AdvancedCounter 合約實例的 transactions 子項中增加了一個交易,並且可通過右側的 View Tx 按鈕在區塊鏈瀏覽器上進行查看。另外,選中該交易子項時,increment 方法下的參數列表中會顯示出此次調用時傳遞的各個實參。

call_increment

重複調用

針對有狀態合約 AdvancedCounter,可以重複上面的步驟繼續調用其方法並觀察其狀態變更,直到合約中的餘額不足(因爲目前暫不支持添加 Input 來支付費用,否則即可無限調用下去)。同樣,大家也可以使用文中介紹的方法,自行嘗試調用其他已支持的合約示例。Have fun 😃

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章