PaySwap
中国人
中国人
  • PaySwap简介
    • 入门指南
      • 创建钱包
      • 获取代币
      • 在不使用中心化交易所的情况下使用PaySwap
      • 将您的钱包连接到 PaySwap
      • 出售/购买原生代币
    • 点击这里获取帮助
      • 故障排除错误
      • 什么是批准交易?
      • 修复 MetaMask 上卡住的待处理事务
  • 🐲雷维坦
    • 👚服装、美容与化妆利维坦
    • 🚰饮料利未坦
    • 🎥文化与娱乐 利维坦
    • 🔌能源利维坦
    • 🥕食品利维坦
    • 😷医疗利维坦
    • 🪖法律与秩序利维坦
    • 🪓采矿利维坦
    • 😈不适合工作的利维坦
    • 🏠房地产利维坦
    • 💻软件、电信和其他利维坦
    • 🚌交通利维坦
    • 🏦金库银行
    • NWO
  • 产品
    • 🌉ARPs
      • 手动 ARPs
        • 设置公司的工资单
        • 设置摩天轮计划
        • 出售资产股份
      • 基于百分比的 ARP
        • 室友一起支付账单
      • 自动ARP
      • 铸造和领取纸币
    • 🟪审核员
      • 自然资源审计
      • SSID 审核
      • 房地产代币化
      • 个人财产代币化
      • 自然代币
      • 赏金猎人
    • 🔮投注合约
      • 无字母编码的投注
      • 使用字母编码的投注
      • 合作伙伴投注活动
    • 💧账单
      • 税收
      • 簿记
      • 银行账户
      • 出售资产股份
    • 🖼️CanCan
      • 产品与服务
        • 列出产品/服务
        • 购买产品/服务
          • 用钱包购买
          • 通过 StakeMarket 购买
          • 通过 StakeMarket 出售
          • 通过 Valuepools/DAOs 购买
      • 文章
        • 列表文章
        • 小费作家
      • 付费专区
        • 列表付费专区
        • 将项目添加到付费专区
        • 从付费专区中删除项目
        • 与付费墙合作
        • 购买付费墙订阅
        • 激活付费专区订阅
      • NFTickets
      • 折扣和现金返还
        • 折扣
        • 现金返还
        • 手动奖励
      • Valuepools 合作伙伴名单
      • 公告
      • 评论
      • 动态定价
      • 合作伙伴
      • 会员资格
      • 身份要求
      • 赞助
      • 拍卖与投标
      • 滴
      • 投票数
    • 🧑‍⚖️dRamps
      • 添加代币市场
      • 部署和添加额外的令牌
      • 激活代币市场
      • 更新代币市场上的价格
      • 自动斜坡
        • 铸造 tFIAT 代币
        • 燃烧 tFIAT 代币
      • 手动斜坡
        • 铸造 tFIAT 代币
        • 燃烧 tFIAT 代币
      • 赞助商 dRamp
      • dRamps Valuepool
      • 出售/购买原生代币
      • 合作伙伴
      • 自举
      • 销售代币市场
      • 用例
        • 支付学费
        • 支付产品/服务费用
        • 汇款
        • 外汇
        • 区块链桥
        • 价值储存
    • 🖼️eCollectibles
      • 默认铸币者
      • 定制铸币厂
      • 列出预先铸造的 NFT
    • 🔄交换
      • 代币互换
      • 如何交易
      • 费用和路线
      • 流动资金池
      • 如何添加/删除流动性
      • 常问问题
    • 🧈未来的抵押品
    • 🎮游戏
      • 游戏对象
      • 游戏奖学金
    • 🎟️彩票
      • 如何玩彩票
      • 彩票常见问题解答
      • 市场彩票
      • 英国金融时报彩票
      • NFT彩票
    • 💳支付卡
      • 市场购买
    • 🐞轮廓
      • 建立你的社交图谱
      • 转账
      • 信用报告
      • 安全及其他
    • 💹收入分成
      • 加速器
      • 企业
      • 贡献者
      • 推荐人
    • 🍯赞助商
    • 🍏SSI
      • 创建数据
      • 创建 SSID
      • 创建独特的个人资料
    • 📈StakeMarket
      • 购买上市产品
      • 招标
      • 抵押贷款
      • 股份申请
      • 诉讼
    • 🖥️TrustBounties
      • 英国《金融时报》赏金
      • NFT 赏金
      • 批准
    • 🌐ValuePools/DAOs
      • 铸造 NFT 代币
      • 赞助价值池
      • 通过 Valuepool 购物
      • 通过价值池进行贷款和投资
      • 创建提案
    • 👾遗嘱
      • 立下遗嘱
      • 使用遗嘱进行存储
    • 🛍️世界赛
      • 红色药丸世界
      • 蓝色药丸世界
      • 绿色世界
  • 用例
    • CanCan
      • 商品市场:Amazon
      • 物品市场:租赁
      • 人才市场
      • AirBnB
      • 乘车服务
      • 送货应用程序
      • Rent The Runway
      • 订阅应用程序
      • 约会应用程序
      • Friend.tech
      • 远程医疗
      • 产品混音
    • Valuepools
      • 法国银行应用程序
      • 集团投资应用程序
      • 保险应用程序
      • 营销应用程序
      • 储蓄应用程序
    • ARPs
      • Budgetting
      • Group Vacation Planning
      • 代理投资
      • Spend Management
      • Loan Management
      • Rent Management
      • Tipping
      • Play & Earn Loan Management
    • Bills
      • Flexible Loan Management
      • Bill Payment
      • Taxes
      • 代理投资
    • Auditors
      • Address Verification
      • Identity Verification
      • Luxury Item Authentication
      • Awards & Trophees
      • Credit Wothiness
    • Games
      • Play To Earn For Your Game
      • Play To Earn For Tripe A Game
      • Betting
    • Betting
      • Stock Market
      • Sports
      • General
      • Companies
      • Swaps
    • Lottery
      • Data Collection
      • Sale Incentive
    • SSI
      • Supply Chain
      • Medical Records
      • Zero Knowledge Proofs
      • Background Checks
      • 单点登录
    • StakeMarket
      • 售前
      • Construction Contract
      • Collateralized Employment Contract
    • TrustBounty
      • 波动性对冲
  • 治理与代币经济学
  • 文化与愿景
  • 路线图
  • 开发商
    • Smart Contracts (EVM)
      • PaySwap Exchange
        • v3 contracts
          • PancakeV3Factory
          • SmartRouterV3
            • V3SwapRouter
            • V2SwapRouter
            • StableSwapRouter
          • NonfungiblePositionManager
          • PancakeV3Pool
      • MasterChef
        • MasterChef V3
      • dRamps
        • dRamp Contract
      • Lottery
        • Lottery Contract
  • 团队
  • 联系我们
    • 客户支持
    • 社交帐户和社区
Powered by GitBook
On this page
  • Contract Roles
  • Global Parameters
  • Token Market Parameters
  • Functions
  • updateAdmin - DevAddr
  • createProtocol - Admin
  • updateProtocol - Admin
  • deleteProtocol - Admin
  • mint - Admin
  • withdraw - Admin
  • updateIndividualProtocol - Anyone
  • burn - Anyone
  • claimPendingRevenue - Anyone
  • unlockBounty - Anyone
  • checkIdentityProof - Anyone
  • updateBounty - Anyone
  • addPartner - Anyone
  • buyAccount - Anyone
  • buyRamp - Anyone
  • updateProfile & updateDevTokenId & updateBadgeId & updateDevFromToken - Anyone

Was this helpful?

  1. 开发商
  2. Smart Contracts (EVM)
  3. dRamps

dRamp Contract

Contract Roles

Role
Description

Admin (onlyAdmin)

An admin of the contract

DevAddr (onlyDev)

The contract owner

Global Parameters

Name
Type
Description

mintFee

uint256

Fee charged by the dRamp for minting tokens

burnFee

uint256

Fee charged by the dRamp for burning tokens

badgeId

uint256

ID of any badge attached to the dRamp

salePrice

uint256

Sale Price of a token market in the dRamp

soldAccounts

uint256

The number of token markets sold by the dRamp

automatic

bool

Automatically burn and mint tokens

_ve

Address

The collection address attached to the dRamp

Token Market Parameters

Name
Type
Description

status

RampStatus { Pending,

Open,

Close

}

Records the state of the token market

tokenId

uint256

The attached token ID from the collection attached to the dRamp

bountyId

uint256

The bounty attached to the token market

profileId

uint256

The profile attached to the token market

badgeId

uint256

The badge attached to the token market

minted

uint256

The amount of tokens minted by the token market

burnt

uint256

The amount of tokens burnt by the token market

salePrice

uint256

The sale price of the token market. This parameter is null for token markets that are not for sale

maxParters

uint256

The number of partners authorized on a token market.

cap

uint256

A cap on the tax taken by the dRamp on minting and burning operations. This parameter is null for token markets that don't have a cap on their taxes

Functions

updateAdmin - DevAddr

   function updateAdmin(address _admin, bool _add) external onlyDev {
        isAdmin[_admin] = _add;
    }

The owner can add/remove other administrators to/from the contract

createProtocol - Admin

function createProtocol(address _token, uint _tokenId) external onlyAdmin {
    require(IRamp(helper).dTokenSetContains(_token));
    if(!AllProtocols.contains(_token)) {
        AllProtocols.add(_token);
        protocolInfo[_token].status = RampStatus.Open;
        if (_tokenId > 0) updateTokenId(_token, _tokenId);

        IRamp(helper).emitCreateProtocol(msg.sender, _token);
    }
}

function updateTokenId(address _token, uint _tokenId) public {
    require(ve(_ve).ownerOf(_tokenId) == msg.sender);
    if (AllProtocols.contains(_token)) {
        protocolInfo[_token].tokenId = _tokenId;
    }
}

function getParams() external view returns(uint,uint,uint,uint,uint,uint,bool,address) {
    return (
        badgeId,
        tokenId,
        mintFee,
        burnFee,
        salePrice,
        soldAccounts,
        automatic,
        _ve
    );
}

This function adds a token market on your dRamp enabling it to mint or burn that token. You can only add approved tokens. The list of approved tokens is available on the page previous to this.

You can also attach a token from the collection attached to the dRamp to enable you to regain your admin privileges in the event you lose access to your wallet but still have the token. The collection address is the _ve parameter which is the last value returned by the getParams function

updateProtocol - Admin

function updateProtocol(
    address _token, 
    bool _close, 
    uint _cap,
    uint _salePrice,
    uint _maxParters
) external onlyAdmin {
    if(AllProtocols.contains(_token)) {
        uint _tokenId = protocolInfo[_token].tokenId;
        require(_tokenId == 0 || isAdmin[ve(_ve).ownerOf(_tokenId)]);
        _updateProtocol(_token, _close, _cap, _salePrice, _maxParters);
    }
}

function _updateProtocol(
    address _token, 
    bool _close, 
    uint _cap,
    uint _salePrice,
    uint _maxParters
) internal {
    if (_close) {
        protocolInfo[_token].status = RampStatus.Close;
    } else if (protocolInfo[_token].status == RampStatus.Close) {
        protocolInfo[_token].status = RampStatus.Open;
    }
    if (_cap >= IRamp(helper).minCap(_token)) {
        protocolInfo[_token].cap = _cap;    
    }
    protocolInfo[_token].salePrice = _salePrice;
    protocolInfo[_token].maxParters = _maxParters;
}

This function updates parameters of a token market on your dRamp. You can use the _close parameter to close the token market.

deleteProtocol - Admin

function deleteProtocol(address _token) public onlyAdmin {
    require(protocolInfo[_token].minted == protocolInfo[_token].burnt);
    require(protocolInfo[_token].bountyId == 0);
    delete protocolInfo[_token];
    AllProtocols.remove(_token);
    
    IRamp(helper).emitDeleteProtocol(msg.sender, _token);
}

This function the market associated to the specified token. This is only possible when the token market has burnt as many of the token as it has minted and there is not bounty currently associated with it

mint - Admin

 function mint(address _token, address to, uint _amount, uint _identityTokenId, string memory _sessionId) external {
    checkIdentityProof(to, _identityTokenId);
    require(IAuth(contractAddress).devaddr_() == msg.sender || isAdmin[msg.sender], "R1");
    require(protocolInfo[_token].status == RampStatus.Open, "R2");
    (uint _mintable,, CollateralStatus _status) = IRamp(IContract(contractAddress).rampAds()).mintAvailable(address(this), _token);
    if (_status == CollateralStatus.OverCollateralized) {
        uint _toMint = Math.min(_mintable, _amount);
        uint _fee;
        uint _payswapFee;
        if (protocolInfo[_token].cap > 0) {
            _fee = Math.min(_toMint * mintFee / 10000, protocolInfo[_token].cap);
            _payswapFee = Math.min(_toMint * IRamp(helper).tradingFee() / 10000, protocolInfo[_token].cap);
        } else {
            _fee = _toMint * mintFee / 10000;
            _payswapFee = _toMint * IRamp(helper).tradingFee() / 10000;
        }
        totalRevenue[_token] += _fee;
        _toMint = _toMint - _fee - _payswapFee;
        protocolInfo[_token].minted += _toMint;
        IRamp(helper).mint(_token, to, _toMint, _payswapFee, _identityTokenId, _sessionId);
    }
}

This function enables users to mint tokens from a token market. It's only callable by the dRamp's Admin or Payswap's Admin. The

withdraw - Admin

function withdraw(address _token, uint amount) external onlyAdmin {
    IERC20(_token).safeTransfer(msg.sender, amount);
}

This withdraws available tokens from the dRamp.

updateIndividualProtocol - Anyone

function updateIndividualProtocol(
    address _token, 
    bool _close, 
    uint _cap,
    uint _salePrice,
    uint _maxParters
) external {
    if(AllProtocols.contains(_token)) {
        require(ve(_ve).ownerOf(protocolInfo[_token].tokenId) == msg.sender);
        require(!isAdmin[msg.sender]);
        _updateProtocol(_token, _close, _cap, _salePrice, _maxParters);
    }
}

function _updateProtocol(
    address _token, 
    bool _close, 
    uint _cap,
    uint _salePrice,
    uint _maxParters
) internal {
    if (_close) {
        protocolInfo[_token].status = RampStatus.Close;
    } else if (protocolInfo[_token].status == RampStatus.Close) {
        protocolInfo[_token].status = RampStatus.Open;
    }
    if (_cap >= IRamp(helper).minCap(_token)) {
        protocolInfo[_token].cap = _cap;    
    }
    protocolInfo[_token].salePrice = _salePrice;
    protocolInfo[_token].maxParters = _maxParters;
}

This function updates parameters of a token market on a dRamp but can be called by anyone who owns to associated token id. You can use the _close parameter to close the token market.

burn - Anyone

function burn(address _token, uint _amount, uint _identityTokenId) external {
    checkIdentityProof(msg.sender, _identityTokenId);
    uint _toBurn = Math.min(
        _amount, 
        protocolInfo[_token].minted - protocolInfo[_token].burnt
    );
    uint _fee;
    uint _payswapFee;
    if (protocolInfo[_token].cap > 0) {
        _fee = Math.min(_toBurn * burnFee / 10000, protocolInfo[_token].cap);
        _payswapFee = Math.min(IRamp(helper).tradingFee() * _toBurn / 10000, protocolInfo[_token].cap);
    } else {
        _fee = _toBurn * burnFee / 10000;
        _payswapFee = IRamp(helper).tradingFee() * _toBurn / 10000;
    }
    _toBurn = _toBurn - _fee - _payswapFee;
    totalRevenue[_token] += _fee;
    IRamp(helper).burn(_token, msg.sender, _toBurn, _fee, _payswapFee);
    protocolInfo[_token].burnt += _toBurn;
}

This function enables users to burn tokens from a token market

claimPendingRevenue - Anyone

function claimPendingRevenue(address _token, uint _partnerBountyId) external {
    require(!isAdmin[msg.sender] && protocolPartners[_token].contains(_partnerBountyId));
    uint _toPay = IRamp(helper).claimPendingRevenue(_token, msg.sender, _partnerBountyId);
    protocolInfo[_token].minted += _toPay;
    paidRevenue[_token][_partnerBountyId] += _toPay;
    IERC20(_token).safeTransfer(msg.sender, _toPay);
}

This function enables token market partners to claim their pending revenue on the token market

unlockBounty - Anyone

function unlockBounty(address _token, uint _bountyId) external {
    require(protocolInfo[_token].minted == protocolInfo[_token].burnt);
    if(isAdmin[msg.sender]) {
        IRamp(helper).endBounty(protocolInfo[_token].bountyId);
        protocolInfo[_token].bountyId = 0;
    } else if (protocolPartners[_token].contains(_bountyId)) {
        IRamp(helper).endBounty(_bountyId);
        protocolPartners[_token].remove(_bountyId);
    }
}

This function deattaches a bounty from a token market

checkIdentityProof - Anyone

function checkIdentityProof(address _owner, uint _identityTokenId) public {
    if (collectionId > 0) {
        IMarketPlace(IContract(contractAddress).marketHelpers2())
        .checkUserIdentityProof(collectionId, _identityTokenId, _owner);
    }
}

This function checks that an identity token passes membership identity requirements on the associated channel/collection

updateBounty - Anyone

function updateBounty(address _token, uint _bountyId) external {
    IRamp(helper).checkBounty(msg.sender, _bountyId);
    require(isAdmin[msg.sender]);
    require(protocolInfo[_token].bountyId == 0);
    protocolInfo[_token].bountyId = _bountyId;
}

This function enables users to attach a bounty to a token market

addPartner - Anyone

function addPartner(address _token, uint _bountyId) external {
    address rampAds = IContract(contractAddress).rampAds();
    (,,CollateralStatus _status) = IRamp(rampAds).mintAvailable(address(this), _token);
    if (_status == CollateralStatus.UnderCollateralized ||
        protocolInfo[_token].maxParters > protocolPartners[_token].length()
    ) {
        IRamp(helper).checkBounty(msg.sender, _bountyId);
        require(!isAdmin[msg.sender]);
        require(protocolPartners[_token].length() < IContract(contractAddress).maximumSize());
        protocolPartners[_token].add(_bountyId);
        uint _share = ITrustBounty(IContract(contractAddress).trustBounty()).getBalance(_bountyId) * 10000 / IRamp(helper).getTotalBalance(address(this), _token);
        // do not account for past revenue for new partners
        paidRevenue[_token][_bountyId] += _share * totalRevenue[_token]/ 10000;
    }
}

This function enables users to partner with a token market and help it become overcollateralized which is necessary for it to become elligible to mint tokens

buyAccount - Anyone

function buyAccount(address _token, uint _tokenId, uint _bountyId) external {
    require(protocolInfo[_token].salePrice > 0);
    require(ve(_ve).ownerOf(_tokenId) == msg.sender);
    
    IERC20(ve(_ve).token()).safeTransferFrom(msg.sender, address(this), protocolInfo[_token].salePrice);
    protocolInfo[_token].salePrice = 0;
    soldAccounts += 1;
    _updateBounty(_token, _bountyId);
    updateTokenId(_token, _tokenId);
}

This function enables users to purchase a token market

buyRamp - Anyone

function buyRamp(address __ve, uint _tokenId, uint[] memory _bountyIds) external {
    require(salePrice > 0 && ve(_ve).ownerOf(_tokenId) == msg.sender);
    require(AllProtocols.length() - soldAccounts == _bountyIds.length);
    
    IERC20(ve(_ve).token()).safeTransferFrom(msg.sender, address(this), salePrice);
    for(uint i = 0; i < AllProtocols.length(); i++) {
        uint __tokenId = protocolInfo[AllProtocols.at(i)].tokenId;
        if (isAdmin[ve(_ve).ownerOf(__tokenId)]) {
            _updateBounty(AllProtocols.at(i), _bountyIds[i]);
        }
    }
    isAdmin[msg.sender] = true;
    isAdmin[devaddr_] = false;
    devaddr_ = msg.sender;
    updateDevTokenId(__ve, _tokenId);
}

This function enables users to purchase an entire dRamp. It requires its salePrice to be above 0 though.

updateProfile & updateDevTokenId & updateBadgeId & updateDevFromToken - Anyone

function updateProfile(address _token, uint _profileId) external {
  require(IProfile(IContract(contractAddress).profile()).addressToProfileId(msg.sender) == _profileId);
  require(isAdmin[msg.sender]);
  protocolInfo[_token].profileId = _profileId;
}

function updateDevTokenId(address __ve, uint _tokenId) public {
    require(ve(__ve).ownerOf(_tokenId) == msg.sender);
    require(isAdmin[msg.sender]);
    _ve = __ve;
    tokenId = _tokenId;
}

function updateBadgeId(address _token, uint _badgeId) external {
    require(ve(IRamp(helper).badgeNFT()).ownerOf(_badgeId) == msg.sender);
    require(isAdmin[msg.sender]);
    protocolInfo[_token].badgeId = _badgeId;
}

function updateDevFromToken(uint _tokenId) external {
    require(ve(_ve).ownerOf(_tokenId) == msg.sender);
    require(tokenId == _tokenId);
    isAdmin[devaddr_] = false;
    devaddr_ = msg.sender;
    isAdmin[msg.sender] = true;
}

If the Owner needs to change the ownership of the contract, they can call this function.

PreviousdRampsNextLottery

Last updated 1 year ago

Was this helpful?