NFT铸造系统开发(成熟及技术)丨功能源码

简介: // add bsv and token to liquidity poolpublic function addLiquidity(PubKey sender, Sig senderSig, int tokenAmount, int senderBalance, int senderKeyIndex, int oldTokenBalance

增加流动性
任何人都可以通过调用函数 addLiquidity 向池中添加流动性。有
首次增加流动性:可以存入任意数量的 BSV 和 Token 。
添加更多流动性: BSV 和 Token 存入的比率必须与池中的现有比率相匹配(第 22 行)。
// add bsv and token to liquidity pool
public function addLiquidity(PubKey sender, Sig senderSig, int tokenAmount, int senderBalance, int senderKeyIndex, int oldTokenBalance,

                        int lpSenderBalance, int lpSenderKeyIndex, int newBsvBalance, SigHashPreimage txPreimage) {
require(checkSig(senderSig, sender));

int oldBsvBalance = SigHash.value(txPreimage);

// mint new lp tokens for the liquidity provider
if (oldBsvBalance == 0) {
    // initialize pool
    
    // initially, just mint new lp tokens per the amount of new bsvs deposited
    int lpMint = newBsvBalance;
    require(this.lpToken.mint(sender, lpSenderBalance, lpMint, lpSenderKeyIndex));
} else {
    // add more liquidity

    int bsvAmount = newBsvBalance - oldBsvBalance;
    
    // deposit ratio must be the same with current pool ration
    // i.e., oldBsvBalance / oldTokenBalance == bsvAmount / tokenAmount
    require(oldBsvBalance * tokenAmount == bsvAmount * oldTokenBalance);

    // mint new lp tokens, proportinal to the amount of new bsvs deposited
    int lpMint = this.lpToken.totalSupply() * bsvAmount / oldBsvBalance;
    require(this.lpToken.mint(sender, lpSenderBalance, lpMint, lpSenderKeyIndex));
}

// transfer tokens to the pool
require(this.token.transferFrom(sender, this.poolPubkey, tokenAmount, senderBalance, senderKeyIndex, oldTokenBalance, senderKeyIndex));

require(this.propagateState(newBsvBalance, txPreimage));

}

相关文章
|
自然语言处理 BI 数据处理
【数据对比】综合分析百度情感分析以及华为情感分析的差异,我有了如下结果
【数据对比】综合分析百度情感分析以及华为情感分析的差异,我有了如下结果
541 0
|
监控 Dubbo Java
深入理解Zookeeper系列-2.Zookeeper基本使用和分布式锁原理
深入理解Zookeeper系列-2.Zookeeper基本使用和分布式锁原理
240 0
|
存储 Rust 安全
服务网格eBPF应用探索之(一)eBPF基础知识
1)技术背景在eBPF诞生之前,对内核的调试和开发有着相当高的门槛,不仅要十分熟悉庞大的内核代码及开发流程,同时重新编译内核后若希望生效还需要重启OS,开发效率也相当低下。而eBPF提供了相当友好的内核开发/观测机制,即:由用户编写符合一定规范的代码,编译后加载至内核,内核会在指定的时机执行这段代码,内核同时还会将Hook点相关的上下文传递给这段代码供使用,代码可以修改上下文,或是通过返回值来改变
1063 0
服务网格eBPF应用探索之(一)eBPF基础知识
|
网络安全
mac下通过ssh脚本实现免账号密码连接运服务器
mac下通过ssh脚本实现免账号密码连接运服务器
161 3
|
消息中间件 Java 程序员
SpringBoot整合RocketMQ,尝尝几大高级特性!
作为一名程序员,您一定熟悉RocketMQ的功能,包括支持事务、顺序和延迟消息等。在程序员界有一句名言,“Talk is cheap. Show me the code” 。本文将通过实际案例来引出解决方案,并通过代码实现,让您在学习本节的过程中能够确切地掌握实际编码技能
403 0
SpringBoot整合RocketMQ,尝尝几大高级特性!
|
分布式计算 DataWorks NoSQL
DataWorks产品使用合集之怎么离线同步MongoDB的增量数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
存储 运维 Java
java云his系统源码一站式诊所SaaS系统Java版云HIS系统 八大特点
HIS系统采用面向技术架构的分析与设计方法,应用多层次应用体系架构设计,运用基于构件技术的系统搭建模式与基于组件模式的系统内核结构。通过建立统一接口标准,实现数据交换和集成共享,通过统一身份认证和授权控制,实现业务集成、界面集成。
257 1
|
存储 监控 Linux
|
编解码 数据可视化 前端开发
ECharts 对比 Highcharts 使用教程
ECharts 对比 Highcharts 使用教程
481 1
|
数据采集 传感器 存储
ESP32+MQTT+MySQL实现发布订阅【气味数据收集】
ESP32+MQTT+MySQL实现发布订阅【气味数据收集】
ESP32+MQTT+MySQL实现发布订阅【气味数据收集】
下一篇
开通oss服务