DAPP公排互助拆分系统开发详情原理丨DAPP拆分互助公排系统开发玩法功能/方案设计/案例分析/成熟技术/源码版

简介: The lifecycle of smart contracts can be summarized into six stages based on their operational mechanisms: negotiation, development, deployment, operation and maintenance, learning, and self destruction. The development stage includes contract testing before contract chaining, while the learning sta

The lifecycle of smart contracts can be summarized into six stages based on their operational mechanisms: negotiation, development, deployment, operation and maintenance, learning, and self destruction. The development stage includes contract testing before contract chaining, while the learning stage includes feedback on the operation of smart contracts and contract updates. It is the infrastructure model of smart contracts, which is composed of infrastructure layer, contract layer, operation and maintenance layer, intelligent layer, presentation layer, and application layer from bottom to top

Decentralized storage technology is a new type of storage technology that changes the traditional centralized storage technology by moving data from a single location to multiple locations, eliminating the responsibility of the central organization or server storing data, increasing security and effective data storage, and ensuring user data security.

The structure of decentralized storage technology is a decentralized node network, which uses distributed storage to store and protect data.

,

Infrastructure layer: encapsulates all the infrastructure that supports the implementation of smart contracts and their derivative applications, including distributed ledgers and their key technologies, development environments, and trusted data sources. The selection of these infrastructure will to some extent affect the design patterns and contract attributes of smart contracts

  (bool success,bytes memory returndata)=_to.call(abi.encodeWithSelector(
function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes memory _data) external returns(bytes4);
}

contract ERC721 is IERC721,IERC165 {
mapping(bytes4 => bool)supportsInterfaces;
bytes4 invalidID = 0xffffffff;

bytes4 constant ERC165_InterfaceID=0x01ffc9a7;     //erc165
bytes4 constant ERC721_InterfaceID=0x80ac58cd;     //erc721 
mapping(address=>uint256)ercTokenCount;            //记录用户token count;
mapping(uint256=>address)ercTokenOwner;            //记录token的拥有者;
mapping(uint256=>address)ercTokenApproved; 
mapping(address=>mapping(address=>bool))ercOperatorForAll;

using Address for address;

constructor(){
    _registerInterface(ERC165_InterfaceID);
    _registerInterface(ERC721_InterfaceID);
}

//授权
modifier canOperator(uint256 _tokenId){
    address owner = ercTokenOwner[_tokenId];
    require(msg.sender == owner || ercOperatorForAll[owner][msg.sender]);
    _;
}

//转账
modifier canTransfer(uint256 _tokenId,address _from){
    address owner = ercTokenOwner[_tokenId];
    require(owner==_from);
    require(msg.sender == owner || msg.sender == ercTokenApproved[_tokenId] || ercOperatorForAll[owner][msg.sender]);
    _;
}

function _registerInterface(bytes4 interfaceID)internal {
    supportsInterfaces[interfaceID]=true;
}
function supportsInterface(bytes4 interfaceID) override  external view returns (bool) {
    require(invalidID != interfaceID);
    return supportsInterfaces[interfaceID];
}

//721
function balanceOf(address _owner) override external view returns (uint256){
    return ercTokenCount[_owner];

}

function ownerOf(uint256 _tokenId) override external view returns (address){
    return ercTokenOwner[_tokenId];
}

function getApproved(uint256 _tokenId) override external view returns (address){
    return ercTokenApproved[_tokenId];
}

function isApprovedForAll(address _owner, address _operator) external view returns (bool){
    return ercOperatorForAll[_owner][_operator];
}

function approve(address _approved, uint256 _tokenId) override external payable{
    ercTokenApproved[_tokenId]=_approved;
    emit Approval(msg.sender,_approved,_tokenId);
}

function setApprovalForAll(address _operator, bool _approved) override external{
    ercOperatorForAll[msg.sender][_operator]=_approved;
    emit ApprovalForAll(msg.sender,_operator,_approved);
}

function transferFrom(address _from, address _to, uint256 _tokenId) override  external payable{
    _transferFrom(_from,_to,_tokenId);
}

function _transferFrom(address _from, address _to, uint256 _tokenId)internal canTransfer(_tokenId,_from){
    ercTokenOwner[_tokenId] = _to;      //更改属主;
    ercTokenCount[_from]-=1;
    ercTokenCount[_to]+=1;
    ercTokenApproved[_tokenId] = address(0);
    emit Transfer(_from, _to,  _tokenId);
}

function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) override external payable{
    _safeTransferFrom(_from,_to,_tokenId,data);
}

function safeTransferFrom(address _from, address _to, uint256 _tokenId)override external payable{
    _safeTransferFrom(_from,_to,_tokenId,"");
}

function _safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) internal { //安全转账即判断对方是否有资格持有ERCtoken,避免转错
    _transferFrom(_from, _to, _tokenId);

    //add safe code
    if(_to.isContract()){           //首先判断对方是否是合约
        bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender,_from,_tokenId,data);   //是否实现了ERC721Received
        require(retval == ERC721TokenReceiver.onERC721Received.selector);
    }
}

function mint(address _to,uint256 _tokenId,bytes memory data)external{
    require(_to != address(0));
    require(ercTokenOwner[_tokenId]==address(0));

    ercTokenOwner[_tokenId]= _to;
    ercTokenCount[_to]+=1;

    if(_to.isContract()){           //首先判断对方是否是合约
        bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender,address(0),_tokenId,data);   //是否实现了ERC721Received
        require(retval == ERC721TokenReceiver.onERC721Received.selector);
    }

    emit Transfer(address(0),_to,_tokenId);
}
相关文章
|
5月前
|
缓存 前端开发 测试技术
什么是七星创客系统丨七星创客系统开发规则玩法/设计方案/逻辑需求/案例项目/源码功能
七星创客系统开发指南是一个帮助开发人员理解并完成七星创客系统的开发任务的指南。以下是一个简要的开发指南需求:
|
7月前
|
算法 区块链 UED
dapp矩阵公排互助系统开发|方案设计|模式案例
Web3.0的智能合约技术可以实现无需信任的推广活动
|
7月前
|
安全 区块链 UED
DAPP去中心化公排互助系统开发|详情逻辑|案例分析
智能合约是一种基于区块链技术的自动化执行合约的工具
dapp众筹矩阵公排互助系统开发指南详细丨功能需求丨案例项目丨方案项目丨源码程序
Requirement analysis and planning: Clarify the system's goals and functional requirements. Understand the characteristics and working methods of the DApp crowdfunding matrix mutual assistance system. Collect user requirements, define the crowdfunding mechanism, matrix common ranking algorithm, and m
|
存储 安全
DAPP/3M互助拆分公排双轨系统开发详细逻辑/案例分析/方案项目/技术分析/源码平台
 DApp是指基于区块练技术的去中心化应用程序,它的特点是去中心化、透明、安全、不可篡改等特点。
|
安全 Go
链游系统开发案例详情/NFT元宇宙链游系统开发方案项目/成熟技术/源码逻辑
Step 1: Requirements analysis and planning. At this stage, the development team needs to have in-depth communication with clients, understand their needs and expectations, and then develop development plans and project plans.
|
存储 前端开发 测试技术
众筹互助智能合约系统开发(开发案例)丨dapp智能合约众筹互助丨公排拆分丨系统开发详细规则/成熟技术/方案设计/源码说明
 智能合约互助系统开发是指创建并实现基于智能合约技术的互助系统。智能合约是一种在区块链上执行的自动化计算代码,它可以在事先设定的条件满足时执行相应的操作,无需依赖人工干预。智能合约互助系统旨在通过智能合约技术来优化和自动化互助服务的提供和管理。
|
开发框架 小程序 前端开发
七星创客丨推三返一丨系统开发案例详细,七星创客推三返一丨七星创客系统开发规则玩法丨成熟方案丨源码逻辑
  随着互联网的普及和电商的迅速发展,越来越多的消费者开始选择在线购物。为了吸引更多的消费者,许多电商平台和卖家推出了各种促销模式,其中推三返一模式系统备受青睐
|
存储 分布式数据库 区块链
DAPP竞拍互助拆分公排系统开发玩法规则/详细逻辑/源码程序
  区块链技术一般用于构建交易系统,而且要保证交易的信息真实可信,可追踪且不可篡改。每一次交易的信息被确认后存储在一个区块中,区块信息通过散列技术加密,以保证信息不被篡改。这些区块按时间顺序构成链条。每个节点都保有完整的区块链信息,个别节点的信息损坏,不会对区块链信息产生影响。这种信息记录方式被称作分布式账本。
|
安全 区块链
DAPP游戏拆分互助系统开发玩法规则/案例分析/项目方案/源码说明
每一个区块中储存有一定的数据或信息,它们根据各自诞生的时间先后顺序连接成链条。所形成的这个链条是可以被保存在所有的服务器中。也就是说,只要整个体系中有任意一台服务器可以正常运作,整条区块链就是安全的。