您当前的位置: 首页 >  区块链
  • 0浏览

    0关注

    1477博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

区块链 solidity io密集

软件工程小施同学 发布时间:2021-05-07 09:28:36 ,浏览量:0

pragma solidity ^0.4.0;

contract IO {
    
    // 一个字符串,字母表,150个字符
    bytes constant ALPHABET = "abcdefghijklmnopqrstuvwxy#$%^&*()_+[]{}|;:,./?`~abcdefghijklmnopqrstuvwxy#$%^&*()_+[]{}|;:,./?`~abcdefghijklmnopqrstuvwxy#$%^&*()_+[]{}|;:,./?`~";

    // 整型转长20位的字节类型
    function uintToBytes(uint v) internal constant returns (bytes20 ret) {
        if (v == 0) {
            // 如果是0,则返回20位的0字符串
            ret = '00000000000000000000';
        }
        else {
            while (v > 0) {
            	// 将ret右移位8位
            	// uint(ret)需要提前将ret变成整型
            	// / (2 ** 8)表示将结果右移位8位
            	// bytes20()表示返回字节类型
                ret = bytes20(uint(ret) / (2 ** 8));
                // v % 10得到余数
                ret |= bytes20(((v % 10) + 48) * 2 ** (8 * 19));
                // 除以10
                v /= 10;
            }
        }
        return ret;
    }
    
    // 得到下标
    function getKey(uint k) internal constant returns(bytes20) {
        return uintToBytes(k);
    }
    
    // 根据下标得到值
    function getVal(uint k) internal constant returns(bytes ret) {
        ret = new bytes(100);
        for (uint i = 0; i < 100; i++) {
            ret[i] = ALPHABET[k%50+i];
        }
    }
    
    event finishWrite(uint size, uint signature);
    event finishScan(uint size, uint signature);
    
    // 全局
    mapping(bytes20=>bytes) store;
    
    // 得到值
    function get(bytes20 key) constant returns(bytes) {
        return store[key];
    }

    // 设置值
    function set(bytes20 key, bytes value) {
        store[key] = value;
    }
    
    // 写size次
    function write(uint start_key, uint size, uint signature) {
        for (uint i = 0; i < size; i++) {
            set(getKey(start_key+i), getVal(start_key+i));
        }
        finishWrite(size, signature);
    }
    
    // 读size次
    function scan(uint start_key, uint size, uint signature) {
        bytes memory ret;
        for (uint i = 0; i < size; i++) {
            ret = get(getKey(start_key+i));
        }
        finishScan(size, signature);
    }
    
    // 从后往前读
    function revert_scan(uint start_key, uint size, uint signature) {
        bytes memory ret;
        for (uint i = 0; i < size; i++) {
            ret = get(getKey(start_key+size-i-1));
        }
        finishScan(size, signature);
    }
}

 

关注
打赏
1665320866
查看更多评论
立即登录/注册

微信扫码登录

0.1023s