基于Table的共享单车租贸合约

 ShareBikeStorage.sol

pragma solidity >=0.6.10;
pragma experimental ABIEncoderV2;
//import "DataStrong.sol";
import "Table.sol";
import "AddressToString.sol";
import "LibConverter.sol";
import "LibString.sol";


contract ShareBikeStorage{
    TableFactory tf;
    
    using LibConverter for uint256;
    using LibString for bytes;
    
    struct Bike{
        string id;
        uint256 borrowed_time;
        address borrow_user;
        int status;
    }
    
    constructor()public{
        tf = TableFactory(0x1001);
        tf.createTable("TABLE_NAME","id","borrowed_time,borrow_user,status");
    }
    function registerBike(string memory _id)public returns(int){
        Table table = tf.openTable("TABLE_NAME");
        Entries entries = table.select(_id,table.newCondition());
        require(entries.size()<=0,"该单车已存在");
        Entry entry = table.newEntry();
        entry.set("id",_id);
        entry.set("borrowed_time",uint256(0));
        entry.set("borrow_user","");
        entry.set("status",uint256(0));
        int count = table.insert(_id,entry);
        return count;
    }
    function getBikeDetail(uint256 _id)public returns(Bike memory){
        Table table = tf.openTable("TABLE_NAME");
        Bike memory bike;
        string memory bikeid = _id.uintToBytes().bytesToString();
        Entries entries = table.select(bikeid,table.newCondition());
        require(entries.size()>0,"该单车不存在");
        Entry entry = entries.get(0);
        bike = Bike({
            id: entry.getString("id"),
            borrowed_time: entry.getUInt("borrowed_time"),
            borrow_user: entry.getAddress("borrow_user"),
            status: entry.getInt("status")
        });
        return bike;
    }
    function getBikeBorrowedUser(uint256 _id)public returns(address){
        Table table = tf.openTable("TABLE_NAME");
        string memory bikeid = _id.uintToBytes().bytesToString();
        Entries entries = table.select(bikeid,table.newCondition());
        require(entries.size()>0,"该单车不存在");
        Entry entry = entries.get(0);
        address user_address = entry.getAddress("borrow_user");
        return user_address;
    }
    function getBikeBorrowedTime(uint256 _id)public returns(uint256){
        Table table = tf.openTable("TABLE_NAME");
        string memory bikeid = _id.uintToBytes().bytesToString();
        Entries entries = table.select(bikeid,table.newCondition());
        require(entries.size()>0,"该单车不存在");
        Entry entry = entries.get(0);
        uint256 time = entry.getUInt("borrowed_time");
        return time;
    }
    function getBikeStatus(uint256 _id)public returns(int){
        Table table = tf.openTable("TABLE_NAME");
        string memory bikeid = _id.uintToBytes().bytesToString();
        Entries entries = table.select(bikeid,table.newCondition());
        require(entries.size()>0,"该单车不存在");
        Entry entry = entries.get(0);
        int _status = entry.getInt("status");
        return _status;
    }
    function updateBikeStatus(uint256 _id,int _status)public returns(int){
        Table table = tf.openTable("TABLE_NAME");
        string memory bikeid = _id.uintToBytes().bytesToString();
        Entries entries = table.select(bikeid,table.newCondition());
        require(entries.size()>0,"该单车不存在");
        Entry entry = entries.get(0);
        entry.set("status",_status);
        int count = table.update(bikeid,entry,table.newCondition());
        return count;
    }
    function updateReturnBike(uint256 _id)public returns(int){
        Table table = tf.openTable("TABLE_NAME");
        string memory bikeid = _id.uintToBytes().bytesToString();
        Entries entries = table.select(bikeid,table.newCondition());
        require(entries.size()>0,"该单车不存在");
        Entry entry = entries.get(0);
        entry.set("borrow_user","");
        entry.set("borrowed_time",uint256(0));
        int count = table.update(bikeid,entry,table.newCondition());
        return count;
    }
    function updateBikeBrrowed(uint256 _id,address _useraddress,uint256 _borrowedtime)public returns(int){
        Table table = tf.openTable("TABLE_NAME");
        string memory bikeid = _id.uintToBytes().bytesToString();
        Entries entries = table.select(bikeid,table.newCondition());
        require(entries.size()>0,"该单车不存在");
        Entry entry = entries.get(0);
        entry.set("borrow_user",_useraddress);
        entry.set("borrowed_time",_borrowedtime);
        entry.set("status",int(1));
        int count = table.update(bikeid,entry,table.newCondition());
        return count;
    }
    function remove(uint256 _id)public returns(int){
        Table table = tf.openTable("TABLE_NAME");
        string memory bikeid = _id.uintToBytes().bytesToString();
        int count = table.remove(bikeid,table.newCondition());
        return count;
    }
}

UserStorage.sol

pragma solidity >=0.6.10;
pragma experimental ABIEncoderV2;
import "DataStrong.sol";
import "Table.sol";
import "AddressToString.sol";

contract UserStorage is DataStrong{
    TableFactory tf;
    
    using AddressToString for address;
    
    constructor()public{
        tf = TableFactory(0x1001);
        tf.createTable("USER_TABLE","useraddress","name,role,balances,credit,status");
    }
    function addUser(address _useraddress,string memory _name,int256 _role)public returns(int){
        Table table = tf.openTable("USER_TABLE");
        string memory userid = _useraddress.addressToString();
        Entries entries = table.select(userid,table.newCondition());
        require(entries.size()<=0,"该用户已存在");
        Entry entry = table.newEntry();
        entry.set("useraddress",userid);
        entry.set("name",_name);
        entry.set("role",_role);
        entry.set("balances",uint256(0));
        entry.set("credit",int256(60));
        entry.set("status",int256(0));
        int count = table.insert(userid,entry);
        return count;
    }
    function getUserDetail(address _useraddress)public returns(string memory,int,int,int){
        Table table = tf.openTable("USER_TABLE");
        string memory userid = _useraddress.addressToString();
        Entries entries = table.select(userid,table.newCondition());
        require(entries.size()>0,"该用户不存在");
        Entry entry = entries.get(0);
        return (entry.getString("name"),entry.getInt("balances"),entry.getInt("credit"),entry.getInt("status"));
    }
    function getUserRole(address _useraddress)public returns(int){
        Table table = tf.openTable("USER_TABLE");
        string memory userid = _useraddress.addressToString();
        Entries entries = table.select(userid,table.newCondition());
        require(entries.size()>0,"该用户不存在");
        Entry entry = entries.get(0);
        return entry.getInt("role");
    }
    function updateBalance(address _useraddress,int256 _balance)public returns(int){
        Table table = tf.openTable("USER_TABLE");
        string memory userid = _useraddress.addressToString();
        User memory user;
        Entries entries = table.select(userid,table.newCondition());
        require(entries.size()>0,"该用户不存在");
        Entry entry = table.newEntry();
        entry.set("balances",_balance);
        int count = table.update(userid,entry,table.newCondition());
        return count;
    }
    function updateCreditPoint(address _useraddress,int256 _credit)public returns(int){
        Table table = tf.openTable("USER_TABLE");
        string memory userid = _useraddress.addressToString();
        User memory user;
        Entries entries = table.select(userid,table.newCondition());
        require(entries.size()>0,"该用户不存在");
        Entry entry = table.newEntry();
        entry.set("credit",_credit);
        int count = table.update(userid,entry,table.newCondition());
        return count;
    }
    function getIsUser(address _useraddress)public returns(bool){
        Table table = tf.openTable("USER_TABLE");
        string memory userid = _useraddress.addressToString();
        Entries entries = table.select(userid,table.newCondition());
        if(entries.size()>0){
            return true;
        }else{
            return false;
        }
    }
    function removeUser(address _useraddress)public returns(int){
        Table table = tf.openTable("USER_TABLE");
        string memory userid = _useraddress.addressToString();
        int count = table.remove(userid,table.newCondition());
        return count;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值