千家信息网

Bytom储蓄分红合约怎么实现

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇内容介绍了"Bytom储蓄分红合约怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!储蓄分红
千家信息网最后更新 2025年12月03日Bytom储蓄分红合约怎么实现

本篇内容介绍了"Bytom储蓄分红合约怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

储蓄分红合约简介

储蓄分红合约指的是项目方发起了一个锁仓计划(即储蓄合约和取现合约),用户可以在准备期自由选择锁仓金额参与该计划,等到锁仓到期之后还可以自动获取锁仓的利润。用户可以在准备期内(dueBlockHeight)参与储蓄,按照合约规定可以 1:1 获取同等数量的储蓄票据资产,同时用户锁仓的资产(deposit)将放到取现合约中,并且项目方是无法动用的,等到锁仓期限(expireBlockHeight)一到,用户便可以调用取现合约将自己储蓄的资产连本待息一同取出来。

合约源代码

// 储蓄合约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    }}
// 取现合约(本金加利息)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    }}

合约的源代码说明可以具体参考Equity合约介绍.

注意事项:

  • 时间期限不是具体的时间,而是通过区块高度来大概估算的(平均区块时间间隔大概为2.5分钟)

  • 比原的精度是8, 即 1BTM = 100000000 neu,正常情况下参与计算都是以neu为单位的,然而虚拟机的int64类型的最大值是9223372036854775807,为了避免数值太大导致计算溢出,所以对计算的金额提出了金额限制(即amountBill/100000000

  • 另外clause cancel是项目方的管理方法,如果储蓄或者取现没有满额,项目方也可以回收剩余的资产

编译并实例化合约

编译Equity合约可以参考一下Equity编译器的介绍说明。假如储蓄合约FixedLimitCollect的参数如下:

assetDeposited          :c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3eetotalAmountBill         :10000000000totalAmountCapital      :20000000000dueBlockHeight          :1070expireBlockHeight       :1090additionalBlockHeight   :1100banker                  :0014dedfd406c591aa221a047a260107f877da92fec5bankerKey               :055539eb36abcaaf127c63ae20e3d049cd28d0f1fe569df84da3aedb018ca1bf

其中bankerKey是管理员的publicKey,可以通过比原链的接口list-pubkeys来获取,注意管理员需要保存一下对应的rootXpubPath,否则无法正确调用clause cancel

实例化合约命令如下:

// 储蓄合约./equity FixedLimitCollect --instance c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3ee 10000000000 20000000000 1070 1090 1100 0014dedfd406c591aa221a047a260107f877da92fec5 055539eb36abcaaf127c63ae20e3d049cd28d0f1fe569df84da3aedb018ca1bf// 取现合约./equity FixedLimitProfit --instance c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3ee 10000000000 20000000000 1090 1100 0014dedfd406c591aa221a047a260107f877da92fec5 055539eb36abcaaf127c63ae20e3d049cd28d0f1fe569df84da3aedb018ca1bf

发布合约交易

发布合约交易即将资产锁定到合约中。由于目前无法在比原的dashboard上构造合约交易,所以需要借助外部工具来发送合约交易,比如postman。按照上述示意图所示,项目方需要发布1000个储蓄资产的储蓄合约和200个利息资产取现合约。假设项目方需要发布1000个储蓄资产(假如精度为8,那么1000个在比原链中表示为100000000000)的锁仓合约,那么他需要将对应数量的票据锁定在储蓄合约中,其交易模板如下:

{  "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对应的UTXO将会被所有用户查询到,使用比原链的接口list-unspent-outputs即可查询。

此外,开发者需要存储一下合约UTXOassetIDprogram,以便在DAPP的前端页面的config配置文件和bufferserver缓冲服务器中调用。如上所示:

// 储蓄合约assetID:13016eff73ffb7539a69e122f80f5c1cc94446773ac3f64dec290429f87e73b3program:20055539eb36abcaaf127c63ae20e3d049cd28d0f1fe569df84da3aedb018ca1bf160014dedfd406c591aa221a047a260107f877da92fec5024c04024204022e040500c817a8040500e40b540220c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3ee4d3b02597a642f0200005479cda069c35b797ca153795579a19a695a790400e1f5059653790400e1f505967c00a07c00a09a69c35b797c9f9161644d010000005b79c2547951005e79895d79895c79895b7989597989587989537a894caa587a649e0000005479cd9f6959790400e1f5059653790400e1f505967800a07800a09a5c7956799f9a6955797b957c96c37800a052797ba19a69c3787c9f91616487000000005b795479515b79c1695178c2515d79c16952c3527994c251005d79895c79895b79895a79895979895879895779895679890274787e008901c07ec1696399000000005b795479515b79c16951c3c2515d79c16963aa000000557acd9f69577a577aae7cac890274787e008901c07ec169515b79c2515d79c16952c35c7994c251005d79895c79895b79895a79895979895879895779895679895579890274787e008901c07ec169632a020000005b79c2547951005e79895d79895c79895b7989597989587989537a894caa587a649e0000005479cd9f6959790400e1f5059653790400e1f505967800a07800a09a5c7956799f9a6955797b957c96c37800a052797ba19a69c3787c9f91616487000000005b795479515b79c1695178c2515d79c16952c3527994c251005d79895c79895b79895a79895979895879895779895679890274787e008901c07ec1696399000000005b795479515b79c16951c3c2515d79c16963aa000000557acd9f69577a577aae7cac890274787e008901c07ec16951c3c2515d79c169633b020000547acd9f69587a587aae7cac747800c0// 取现合约assetID:c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3eeprogram:20055539eb36abcaaf127c63ae20e3d049cd28d0f1fe569df84da3aedb018ca1bf160014dedfd406c591aa221a047a260107f877da92fec5024c040242040500c817a8040500e40b540220c6b12af8326df37b8d77c77bfa2547e083cbacde15cc48da56d4aa4e4235a3ee4caa587a649e0000005479cd9f6959790400e1f5059653790400e1f505967800a07800a09a5c7956799f9a6955797b957c96c37800a052797ba19a69c3787c9f91616487000000005b795479515b79c1695178c2515d79c16952c3527994c251005d79895c79895b79895a79895979895879895779895679890274787e008901c07ec1696399000000005b795479515b79c16951c3c2515d79c16963aa000000557acd9f69577a577aae7cac747800c0

"Bytom储蓄分红合约怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

合约 储蓄 资产 项目 交易 用户 分红 时间 金额 管理 编译 内容 准备期 利息 区块 实例 情况 接口 数量 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 闵行区新型网络技术 中原网络技术有限公司 即墨区苹果软件开发哪家靠谱 苹果账户的默认服务器地址 360 服务器代理 倩女幽魂雪中情服务器 网络安全与公共事业管理 数据库通常分为什么 数据库及其应用 自考 能做数据库的笔记本电脑 新网锐捷网络技术有限公司官网 安卓软件开发工程师编程语言 上海软件开发大全 先秦两汉古籍数据库 上海海事大学校园网服务器地址 数据库的存储服务在哪里 网络安全信息应急时间 远程服务器上管理邮件的手段 发动机软件开发流程示意图 提取安卓设备应用数据库 保定哪个职高软件开发好 即墨区游戏软件开发公司有哪些 南京进口软件开发销售方法 网吧服务器电源 软件开发公司工资分配表 如何将一个文件导入数据库 哪个端口可以重启或关闭服务器 数据库一个人有多个手机号 虚拟穿戴软件开发 nodejs 数据库
0