成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Bytom儲(chǔ)蓄分紅合約解析

chnmagnus / 1759人閱讀

摘要:儲(chǔ)蓄分紅合約簡(jiǎn)介儲(chǔ)蓄分紅合約指的是項(xiàng)目方發(fā)起了一個(gè)鎖倉(cāng)計(jì)劃即儲(chǔ)蓄合約和取現(xiàn)合約,用戶可以在準(zhǔn)備期自由選擇鎖倉(cāng)金額參與該計(jì)劃,等到鎖倉(cāng)到期之后還可以自動(dòng)獲取鎖倉(cāng)的利潤(rùn)。

儲(chǔ)蓄分紅合約簡(jiǎn)介

儲(chǔ)蓄分紅合約指的是項(xiàng)目方發(fā)起了一個(gè)鎖倉(cāng)計(jì)劃(即儲(chǔ)蓄合約和取現(xiàn)合約),用戶可以在準(zhǔn)備期自由選擇鎖倉(cāng)金額參與該計(jì)劃,等到鎖倉(cāng)到期之后還可以自動(dòng)獲取鎖倉(cāng)的利潤(rùn)。用戶可以在準(zhǔn)備期內(nèi)(dueBlockHeight)參與儲(chǔ)蓄,按照合約規(guī)定可以 1:1 獲取同等數(shù)量的儲(chǔ)蓄票據(jù)資產(chǎn),同時(shí)用戶鎖倉(cāng)的資產(chǎn)(deposit)將放到取現(xiàn)合約中,并且項(xiàng)目方是無(wú)法動(dòng)用的,等到鎖倉(cāng)期限(expireBlockHeight)一到,用戶便可以調(diào)用取現(xiàn)合約將自己儲(chǔ)蓄的資產(chǎn)連本待息一同取出來(lái)。其示意圖如下:

從上圖中可以看出,項(xiàng)目方發(fā)布了一個(gè)利潤(rùn)為20%的鎖倉(cāng)項(xiàng)目,其中儲(chǔ)蓄合約FixedLimitCollect鎖定了1000個(gè)票據(jù)資產(chǎn)(bill),同時(shí)項(xiàng)目方將200個(gè)儲(chǔ)蓄資產(chǎn)(deposit)鎖定到利息合約中。待項(xiàng)目方發(fā)布完合約之后,所有用戶便可以參與了。例如上圖中user1調(diào)用合約儲(chǔ)蓄了500,這500個(gè)儲(chǔ)蓄資產(chǎn)將被鎖定在取現(xiàn)合約FixedLimitProfit中,同時(shí)user1獲得了500個(gè)票據(jù)資產(chǎn),剩余找零的資產(chǎn)將繼續(xù)鎖定在儲(chǔ)蓄合約FixedLimitCollect中,以此類推,user2user3也是相同的流程,直到儲(chǔ)蓄合約沒(méi)有資產(chǎn)為止。取現(xiàn)合約FixedLimitProfit跟儲(chǔ)蓄合約的模型大致相同,只是取現(xiàn)合約是由多個(gè)UTXO組成的,用戶在取現(xiàn)的時(shí)候可以并行操作。但是如果合約中的面值不能支持用戶一次性取現(xiàn)的話,需要分多次提取。例如user1擁有500個(gè)票據(jù)資產(chǎn),而可以獲得的本息總額為600,但是取現(xiàn)的UTXO面值為500,那么user1一次最多只能取500,剩下的100需要再構(gòu)造一筆交易來(lái)提現(xiàn)。

合約源代碼
// 儲(chǔ)蓄合約
import "./FixedLimitProfit"
contract FixedLimitCollect(assetDeposited: Asset,
                        totalAmountBill: Amount,
                        totalAmountCapital: Amount,
                        dueBlockHeight: Integer,
                        expireBlockHeight: Integer,
                        additionalBlockHeight: Integer,
                        banker: Program,
                        bankerKey: PublicKey) locks billAmount of billAsset {
    clause collect(amountDeposited: Amount, saver: Program) {
        verify below(dueBlockHeight)
        verify amountDeposited <= billAmount && totalAmountBill <= totalAmountCapital
        define sAmountDeposited: Integer = amountDeposited/100000000
        define sTotalAmountBill: Integer = totalAmountBill/100000000
        verify sAmountDeposited > 0 && sTotalAmountBill > 0
        if amountDeposited < billAmount {
            lock amountDeposited of assetDeposited with FixedLimitProfit(billAsset, totalAmountBill, totalAmountCapital, expireBlockHeight, additionalBlockHeight, banker, bankerKey)
            lock amountDeposited of billAsset with saver
            lock billAmount-amountDeposited of billAsset with FixedLimitCollect(assetDeposited, totalAmountBill, totalAmountCapital, dueBlockHeight, expireBlockHeight, additionalBlockHeight, banker, bankerKey)
        } else {
            lock amountDeposited of assetDeposited with FixedLimitProfit(billAsset, totalAmountBill, totalAmountCapital, expireBlockHeight, additionalBlockHeight, banker, bankerKey)
            lock billAmount of billAsset with saver
        }
    }
    clause cancel(bankerSig: Signature) {
        verify above(dueBlockHeight)
        verify checkTxSig(bankerKey, bankerSig)
        unlock billAmount of billAsset
    }
}
// 取現(xiàn)合約(本金加利息)
contract FixedLimitProfit(assetBill: Asset,
                        totalAmountBill: Amount,
                        totalAmountCapital: Amount,
                        expireBlockHeight: Integer,
                        additionalBlockHeight: Integer,
                        banker: Program,
                        bankerKey: PublicKey) locks capitalAmount of capitalAsset {
    clause profit(amountBill: Amount, saver: Program) {
        verify above(expireBlockHeight)
        define sAmountBill: Integer = amountBill/100000000
        define sTotalAmountBill: Integer = totalAmountBill/100000000
        verify sAmountBill > 0 && sTotalAmountBill > 0 && amountBill < totalAmountBill
        define gain: Integer = totalAmountCapital*sAmountBill/sTotalAmountBill
        verify gain > 0 && gain <= capitalAmount
        if gain < capitalAmount {
            lock amountBill of assetBill with banker
            lock gain of capitalAsset with saver
            lock capitalAmount - gain of capitalAsset with FixedLimitProfit(assetBill, totalAmountBill, totalAmountCapital, expireBlockHeight, additionalBlockHeight, banker, bankerKey)
        } else {
            lock amountBill of assetBill with banker
            lock capitalAmount of capitalAsset with saver
        }
    }
    clause cancel(bankerSig: Signature) {
        verify above(additionalBlockHeight)
        verify checkTxSig(bankerKey, bankerSig)
        unlock capitalAmount of capitalAsset
    }
}

合約的源代碼說(shuō)明可以具體參考Equity合約介紹.

注意事項(xiàng):

時(shí)間期限不是具體的時(shí)間,而是通過(guò)區(qū)塊高度來(lái)大概估算的(平均區(qū)塊時(shí)間間隔大概為2.5分鐘)

比原的精度是8, 即 1BTM = 100000000 neu,正常情況下參與計(jì)算都是以neu為單位的,然而虛擬機(jī)的int64類型的最大值是9223372036854775807,為了避免數(shù)值太大導(dǎo)致計(jì)算溢出,所以對(duì)計(jì)算的金額提出了金額限制(即amountBill/100000000

另外clause cancel是項(xiàng)目方的管理方法,如果儲(chǔ)蓄或者取現(xiàn)沒(méi)有滿額,項(xiàng)目方也可以回收剩余的資產(chǎn)

編譯并實(shí)例化合約

編譯Equity合約可以參考一下Equity編譯器的介紹說(shuō)明。假如儲(chǔ)蓄合約FixedLimitCollect的參數(shù)如下:

assetDeposited          :c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3ee
totalAmountBill         :10000000000
totalAmountCapital      :20000000000
dueBlockHeight          :1070
expireBlockHeight       :1090
additionalBlockHeight   :1100
banker                  :0014dedfd406c591aa221a047a260107f877da92fec5
bankerKey               :055539eb36abcaaf127c63ae20e3d049cd28d0f1fe569df84da3aedb018ca1bf

其中bankerKey是管理員的publicKey,可以通過(guò)比原鏈的接口list-pubkeys來(lái)獲取,注意管理員需要保存一下對(duì)應(yīng)的rootXpubPath,否則無(wú)法正確調(diào)用clause cancel。

實(shí)例化合約命令如下:

// 儲(chǔ)蓄合約
./equity FixedLimitCollect --instance c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3ee 10000000000 20000000000 1070 1090 1100 0014dedfd406c591aa221a047a260107f877da92fec5 055539eb36abcaaf127c63ae20e3d049cd28d0f1fe569df84da3aedb018ca1bf

// 取現(xiàn)合約
./equity FixedLimitProfit --instance c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3ee 10000000000 20000000000 1090 1100 0014dedfd406c591aa221a047a260107f877da92fec5 055539eb36abcaaf127c63ae20e3d049cd28d0f1fe569df84da3aedb018ca1bf
發(fā)布合約交易

發(fā)布合約交易即將資產(chǎn)鎖定到合約中。由于目前無(wú)法在比原的dashboard上構(gòu)造合約交易,所以需要借助外部工具來(lái)發(fā)送合約交易,比如postman。按照上述示意圖所示,項(xiàng)目方需要發(fā)布1000個(gè)儲(chǔ)蓄資產(chǎn)的儲(chǔ)蓄合約和200個(gè)利息資產(chǎn)取現(xiàn)合約。假設(shè)項(xiàng)目方需要發(fā)布1000個(gè)儲(chǔ)蓄資產(chǎn)(假如精度為8,那么1000個(gè)在比原鏈中表示為100000000000)的鎖倉(cāng)合約,那么他需要將對(duì)應(yīng)數(shù)量的票據(jù)鎖定在儲(chǔ)蓄合約中,其交易模板如下:

{
  "base_transaction": null,
  "actions": [
    {
      "account_id": "0ILGLSTC00A02",
      "amount": 20000000,
      "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
      "type": "spend_account"
    },
    {
      "account_id": "0ILGLSTC00A02",
      "amount": 100000000000,
      "asset_id": "13016eff73ffb7539a69e122f80f5c1cc94446773ac3f64dec290429f87e73b3",
      "type": "spend_account"
    },
    {
      "amount": 100000000000,
      "asset_id": "13016eff73ffb7539a69e122f80f5c1cc94446773ac3f64dec290429f87e73b3",
      "control_program": "20055539eb36abcaaf127c63ae20e3d049cd28d0f1fe569df84da3aedb018ca1bf160014dedfd406c591aa221a047a260107f877da92fec5024c04024204022e040500c817a8040500e40b540220c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3ee4d3b02597a642f0200005479cda069c35b797ca153795579a19a695a790400e1f5059653790400e1f505967c00a07c00a09a69c35b797c9f9161644d010000005b79c2547951005e79895d79895c79895b7989597989587989537a894caa587a649e0000005479cd9f6959790400e1f5059653790400e1f505967800a07800a09a5c7956799f9a6955797b957c96c37800a052797ba19a69c3787c9f91616487000000005b795479515b79c1695178c2515d79c16952c3527994c251005d79895c79895b79895a79895979895879895779895679890274787e008901c07ec1696399000000005b795479515b79c16951c3c2515d79c16963aa000000557acd9f69577a577aae7cac890274787e008901c07ec169515b79c2515d79c16952c35c7994c251005d79895c79895b79895a79895979895879895779895679895579890274787e008901c07ec169632a020000005b79c2547951005e79895d79895c79895b7989597989587989537a894caa587a649e0000005479cd9f6959790400e1f5059653790400e1f505967800a07800a09a5c7956799f9a6955797b957c96c37800a052797ba19a69c3787c9f91616487000000005b795479515b79c1695178c2515d79c16952c3527994c251005d79895c79895b79895a79895979895879895779895679890274787e008901c07ec1696399000000005b795479515b79c16951c3c2515d79c16963aa000000557acd9f69577a577aae7cac890274787e008901c07ec16951c3c2515d79c169633b020000547acd9f69587a587aae7cac747800c0",
      "type": "control_program"
    }
  ],
  "ttl": 0,
  "time_range": 1521625823
}

合約交易成功后,合約control_program對(duì)應(yīng)的UTXO將會(huì)被所有用戶查詢到,使用比原鏈的接口list-unspent-outputs即可查詢。

此外,開發(fā)者需要存儲(chǔ)一下合約UTXOassetIDprogram,以便在DAPP的前端頁(yè)面的config配置文件和bufferserver緩沖服務(wù)器中調(diào)用。如上所示:

// 儲(chǔ)蓄合約
assetID:13016eff73ffb7539a69e122f80f5c1cc94446773ac3f64dec290429f87e73b3
program:20055539eb36abcaaf127c63ae20e3d049cd28d0f1fe569df84da3aedb018ca1bf160014dedfd406c591aa221a047a260107f877da92fec5024c04024204022e040500c817a8040500e40b540220c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3ee4d3b02597a642f0200005479cda069c35b797ca153795579a19a695a790400e1f5059653790400e1f505967c00a07c00a09a69c35b797c9f9161644d010000005b79c2547951005e79895d79895c79895b7989597989587989537a894caa587a649e0000005479cd9f6959790400e1f5059653790400e1f505967800a07800a09a5c7956799f9a6955797b957c96c37800a052797ba19a69c3787c9f91616487000000005b795479515b79c1695178c2515d79c16952c3527994c251005d79895c79895b79895a79895979895879895779895679890274787e008901c07ec1696399000000005b795479515b79c16951c3c2515d79c16963aa000000557acd9f69577a577aae7cac890274787e008901c07ec169515b79c2515d79c16952c35c7994c251005d79895c79895b79895a79895979895879895779895679895579890274787e008901c07ec169632a020000005b79c2547951005e79895d79895c79895b7989597989587989537a894caa587a649e0000005479cd9f6959790400e1f5059653790400e1f505967800a07800a09a5c7956799f9a6955797b957c96c37800a052797ba19a69c3787c9f91616487000000005b795479515b79c1695178c2515d79c16952c3527994c251005d79895c79895b79895a79895979895879895779895679890274787e008901c07ec1696399000000005b795479515b79c16951c3c2515d79c16963aa000000557acd9f69577a577aae7cac890274787e008901c07ec16951c3c2515d79c169633b020000547acd9f69587a587aae7cac747800c0

// 取現(xiàn)合約
assetID:c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3ee
program:20055539eb36abcaaf127c63ae20e3d049cd28d0f1fe569df84da3aedb018ca1bf160014dedfd406c591aa221a047a260107f877da92fec5024c040242040500c817a8040500e40b540220c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3ee4caa587a649e0000005479cd9f6959790400e1f5059653790400e1f505967800a07800a09a5c7956799f9a6955797b957c96c37800a052797ba19a69c3787c9f91616487000000005b795479515b79c1695178c2515d79c16952c3527994c251005d79895c79895b79895a79895979895879895779895679890274787e008901c07ec1696399000000005b795479515b79c16951c3c2515d79c16963aa000000557acd9f69577a577aae7cac747800c0

本期的比原儲(chǔ)蓄分紅合約就介紹在這里,下一期我們將詳細(xì)介紹如何基于該合約開發(fā)dapp應(yīng)用

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/24623.html

相關(guān)文章

  • 調(diào)用Bytom Chrome插件錢包開發(fā)Dapp

    摘要:流程總結(jié)就是下載安裝插件錢包,如果自己的不需要跳過(guò)這一步。然后將編譯后的合約參數(shù)配置在的配置文件,如下圖全紅部分是測(cè)試網(wǎng)合約配置參數(shù)調(diào)用插件錢包。開發(fā)出優(yōu)秀的應(yīng)用。 安裝使用插件錢包 1. 打開Google瀏覽器的應(yīng)用商店,搜索Bystore showImg(https://segmentfault.com/img/bVbq0Ol?w=2554&h=1312); 下載鏈接:http:/...

    Mike617 評(píng)論0 收藏0
  • Bytom合約預(yù)編譯

    摘要:比原項(xiàng)目倉(cāng)庫(kù)地址地址在開發(fā)合約的過(guò)程中你們有沒(méi)有遇到一些問(wèn)題呢比如編譯合約的過(guò)程中不能實(shí)時(shí)動(dòng)態(tài)的去檢查我們所編譯的合約文件是否正確,那么我今天就教大家一種很方便的方法。圖中對(duì)應(yīng)的參數(shù)表示實(shí)例化合約,對(duì)應(yīng)的表示指定執(zhí)行合約里面具體的函數(shù)。 比原項(xiàng)目倉(cāng)庫(kù): Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/B...

    libxd 評(píng)論0 收藏0
  • 比原鏈合約入門教程

    摘要:比原項(xiàng)目倉(cāng)庫(kù)地址地址一合約簡(jiǎn)述是的一種智能合約語(yǔ)言,是一門聲明性謂詞語(yǔ)言。詳細(xì)說(shuō)明請(qǐng)參考官方合約相關(guān)介紹。編譯合約,返回結(jié)果便是可鎖定的合約。三解鎖合約流程合約交易被區(qū)塊打包成功之后,可以查看具體的合約交易內(nèi)容,找到對(duì)應(yīng)的。 比原項(xiàng)目倉(cāng)庫(kù): Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBl...

    brianway 評(píng)論0 收藏0
  • Bytom猜謎合約使用指南

    摘要:結(jié)語(yǔ)當(dāng)前猜謎合約提供了體驗(yàn)版本,有興趣的朋友可以做一個(gè)口令紅包,簡(jiǎn)化一下用戶操作和體驗(yàn)。 準(zhǔn)備工作: 1、安裝全節(jié)點(diǎn)錢包V1.0.5以上并同步完成; 2、已經(jīng)發(fā)行一種資產(chǎn),發(fā)行資產(chǎn)的方法具體見(jiàn)文章《如何在Bytom上發(fā)布資產(chǎn)?》 3、準(zhǔn)備好一些BTM作為手續(xù)費(fèi); 設(shè)置謎語(yǔ)(鎖定資產(chǎn)): 1、打開錢包,點(diǎn)擊Equity合約按鈕; showImg(https://segmentfault....

    mzlogin 評(píng)論0 收藏0
  • Bytom資產(chǎn)發(fā)行與部署合約教程

    摘要:筆者看了官方的多個(gè)合約模版,于是準(zhǔn)備部署一個(gè)簡(jiǎn)單的比較數(shù)字大小的合約。部署合約部署合約其實(shí)就是發(fā)起交易,在交易中帶上合約程序。到此,發(fā)布和解鎖合約就全部完成啦。 發(fā)行資產(chǎn) 在比原鏈上發(fā)行資產(chǎn)比較方便快捷,使用節(jié)點(diǎn)的dashboard圖形界面操作就可以,先在 資產(chǎn)一欄新建資產(chǎn)showImg(https://segmentfault.com/img/bVbhq1s?w=1044&h=892...

    Cruise_Chan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<