zoukankan      html  css  js  c++  java
  • 积分智能合约

    pragma solidity ^0.4.22;
    
    /**
     * @title SafeMath
     * @dev Math operations with safety checks that throw on error
     */
    library SafeMath {
      function mul(uint256 a, uint256 b) internal constant returns (uint256) {
        uint256 c = a * b;
        assert(a == 0 || c / a == b);
        return c;
      }
    
      function div(uint256 a, uint256 b) internal constant returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
      }
    
      function sub(uint256 a, uint256 b) internal constant returns (uint256) {
        assert(b <= a);
        return a - b;
      }
    
      function add(uint256 a, uint256 b) internal constant returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
      }
    }
       
    //管理者
    contract owned {
        address public owner;
    
        function owned() public {
            owner = msg.sender;
        }
    
    	// onlyOwner 函数修改器是一个合约属性,可以被继承,还能被重写。它用于在函数执行前检查某种前置条件
        modifier onlyOwner {
            require(msg.sender == owner);
            _;
        }
    
    	//实现所有权转移
        function transferOwnership(address newOwner) onlyOwner public {
            owner = newOwner;
        }
    }
    
    //必须是合约创建者才能添加积分 销毁积分
    contract JiFen is owned {
    
       using SafeMath for uint256;
    
       function JiFen() public {}
       
       //事件机制测试
       event Instructor(bytes32 txid,bytes32 memberOID);
    
       struct TxDetail{
          bytes32 txid;  //交易编号
          bytes32 memberOID;  //交易者编号
          string companyOID; //所属租户
          string siteOID; //所属场站
          string createTime; //创建时间
          string updateTime; //更新时间
          string integral; //积分数
          string types_deductibleAmount_consumeAmount_goods_goodsQty; //类型  抵扣金额 消费金额 消费商品 商品数量
       }
        
        //查看对应账号的积分余额。 任何人都可以查到任何地址的余额,正如所有数据在区块链上都是公开的。
    	mapping(bytes32 => uint256) public balanceOf;
    	//用户交易明细
    	mapping(bytes32 => bytes32[]) public user_txs;  
    	//交易细节
    	mapping(bytes32 => TxDetail) public tx_details;   
    	
    	//分配积分流程函数1、增加积分 2、增加交易明细 3、维护用户交易明细
    	function distributeJiFen_flow(uint256 value,bytes32 txid,bytes32 memberOID,string companyOID,string siteOID,string createTime,string updateTime,string integral,string types_deductibleAmount_consumeAmount_goods_goodsQty) onlyOwner public returns (bool, string){
    	   balanceOf[memberOID] = balanceOf[memberOID].add(value);
    	  
    	   tx_details[txid] = TxDetail(txid,memberOID,companyOID,siteOID,createTime,updateTime,integral,types_deductibleAmount_consumeAmount_goods_goodsQty);
           emit Instructor(txid, memberOID);
            
    	   user_txs[memberOID].push(txid);
    	   return (true,"success");
    	}
    	
    	//分配积分流程函数1、减少积分 2、增加交易明细 3、维护用户交易明细
    	function deductJiFen_flow(uint256 value,bytes32 txid,bytes32 memberOID,string companyOID,string siteOID,string createTime,string updateTime,string integral,string types_deductibleAmount_consumeAmount_goods_goodsQty) onlyOwner public returns (bool, string){
    	   require(balanceOf[memberOID] >= value);                // Check if the targeted balance is enough
           balanceOf[memberOID] = balanceOf[memberOID].sub(value);                        // Subtract from the targeted balance
    	 
    	   tx_details[txid] = TxDetail(txid,memberOID,companyOID,siteOID,createTime,updateTime,integral,types_deductibleAmount_consumeAmount_goods_goodsQty);
           emit Instructor(txid, memberOID);
           
    	   user_txs[memberOID].push(txid);
    	   return (true,"success");
    	}
    	
        
        function getUser_txsLength(bytes32 memberOID) public constant returns (uint256) {
            return user_txs[memberOID].length;
        }
    
    }
    

      

  • 相关阅读:
    一个合格的员工或者管理者是怎样炼成的
    关于找不到库文件
    dell md3200i mdss (企业管理) 安装的那点事儿(2)
    dell md3200i mdss (企业管理) 安装的那点事儿
    From 202.97.60.193 icmp_seq=48 Time to live exceeded
    关于清除arp 缓存的那点事儿
    ping 或者ssh 发生connect: No buffer space available 错误
    考研打卡_Day047
    考研打卡_Day046
    考研打卡_Day045
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/9103827.html
Copyright © 2011-2022 走看看