美文网首页区块链商业模式研究
在区块链上借钱给机器人(2)

在区块链上借钱给机器人(2)

作者: Yuan_c2cc | 来源:发表于2018-03-03 16:35 被阅读0次

    先重温一下三个基本原则:

    1. 账号的单边性----密钥持有者可以证明账户是自己的,也可以假装不是(遗弃账号);

    2. 总体余额非负----相互绑定的账户总价值不能为负:其中可以存在负余额的账户,但总和必须为正。而不与其他账户绑定的单个账户,是不能出现负余额的。否则账号会被遗弃;

    3. 账户的非经济价值----之所以存在无抵押的纯粹信用贷,依靠的是大量“非经济”账户。一定程度上说,这些无变现价值的账户,成为了一种特殊的抵押物,

    第一个模式中,借款的安全性是依靠在账号内放置抵押物的方式完成的。

    基于抵押的借款

    这种模式的一个明显的限制是,只能用于有明确经济价值的资产,比如各种token。

    第二种模式:抵押账户的非经济价值

    如果能认可账户的非经济价值,那么就有理由相信,即使账户的显性资产低于负债,只要它有足够的隐形价值,就不会违约。这也可以减轻对传统抵押物的依赖,实现“信用借款”。

    第二种模式

    链上的账号有哪些可能的隐形价值呢? 大概可以有这么几类

    1. 历史意义: 比如前N个区块的矿工账号(这甚至被认为是证明谁是中本聪的证据之一);使用超过N年的账号(对标QQ号);某些大型时间曾经使用的账号...因为区块链本身时间还比较早,这一块的价值才刚刚开始被大家认识。但是参考千年来对古董和收藏品的热情,相信会有越来越多的“历史意义”被挖掘出来;
    2. 账号特性: 比如以特殊字符开头的账号。有些人为了地址更容易被人识别,很早就开始专门生成一些这样的账号(类似QQ的生日号)。这类东西由于稀缺性也好,POW也好,应该是有一定价值的;同时,随着技术的发展和升级,可能会对某些部分做升级,可能某些feature会变成“限量”----比如以太坊未来要取消个人账户跟合约账户的区别,这会不会导致个人账户成为限量版?
    3. 外部权限: 以太坊的合约权限控制大部分都是按照账号来做的,也就是说,某些账号可能成为了其他项目/DAO的“owner”,“admin”,“abitrator”,“board member”,“contributor”。这给了这些账号一些普通账号不具备的权限----比如某机构的决策需要这个账号同意才能生效,更极端的例子,这个账号可以增发某token。这些权限显然有某种价值。
    账号的隐形价值

    以上只是目前能看到的一些例子,随着币圈的发展,应该还会有更多的隐形价值被创造出来,这些都使得了账号本身可以成为非常好的抵押物---即使它本身并不存在什么直接的显性资产。

    为了完成这一点,我们可以一开始在定义账号的时候,就在里面预留一个“可抵押”接口---这种抵押并不是针对任何资产,而是针对账户本身:

    • 没有抵押的情况下,账户可以像普通账户一样任意使用;
    • 如果设置抵押,账户的操作就受到限制,需要抵押权人批准方可执行;
    • 还款可以自动解除抵押;
    • 到期不能还款,账号控制权转给抵押权人(有点类似典当);

    比如下面的合约就能实现这些简单功能(伪代码,别纠结语法):

    contract pledgable{ 
       address owner;//控制人
       address pledgee;//抵押权人
       uint debtAmt;//债权金额
       date deadline; // 到期时间,如果到此时还没有解除抵押,抵押权人获得账号控制权。
       string status;  //当前状态
         
       //这三个变量用来对外发送任意请求;
       address requestContract; 
       string requestFunc;
       bytes requestParam;
       
       modifier onlyOwner{//只有控制人能执行的函数
         require(msg.sender==owner);
         _;
       }
      modifier onlyOwner{//只有抵押权人能执行的函数
         require(msg.sender==pledgee);
         _;
       }
    
      function pledged(){ //新建
        owner = msg.sender;  
        status="unpledged";//尚未抵押
      }
      function setPledgee(address _pledgee, uint _debtAmt, date _deadline) onlyOwner{ //前一次抵押解除后
        //这个账户可以被再次抵押给不同的人;
         require(status=="unpledged");//只有解除当前抵押以后才能修改;
         pledgee=_pledgee;
         debtAmt=_debtAmt;
         deadline=_deadline;
      }
      function register() payable{//抵押权人支付一笔借款金额,这个账户被用作抵押;
        require(msg.sender=pledgee);//确认抵押权人;
        require(msg.value=debtAmt); //确认金额
        pledgee.transfer(debtAmt);//金额转给控制人账户(其实不一定这样做)
        status="pledged";    
      }
    
      function funcRequest(address _requestContract, string _requestFunc, bytes _requestParam) {//抵押权人请
        //求发送指令
        requestContract=_requestContract;
        requestFunc=_requestFunc; 
        requestParam=_requestParam;   
        if(status=="unledged") // 如果没有抵押,直接运行。否则等批准
          sendRequest();   
      }
    
      function approve() onlyPledgee{ //批准发送对外请求,只有抵押权人能做
        sendRequest();      
      }
    
      function sendRequest() internal{ //发送请求
        contract.func(param);//这只是个伪代码。实际的代码比较复杂,可以参考uport的实现
        requestContract=0;
        requestFunc="";
        requestParam=0;
      }
      function release() payable onlyPledger{ //抵押权人还款并解除抵押;
        require(debtAmt==msg.value); //确认还款金额
        pledgee.transfer(debtAmt); // 将这笔还款转给抵押权人
        pledgee=0;
        status="unpledged";// 改变状态   
      }
    
      function foreclose() onlyPledgee{ //到期未能赎回,账号归抵押权人所有;
        require(today > deadline); //确认已经到期; 
        owner = pledgee; // 账号变成抵押权人的了;
        status="unpledged"; //因为所有权已经转移,也就不存在抵押了。
      }
    }
    

    如果Alice有一个可抵押账号A,

    在这一种模式是,我们实现了一个不依赖显性资产抵押的借贷模式。
    账号的隐形资产成为了借贷的基础。

    这种模式也有一定的局限性,最大的限制是要求一个账号拥有足够的隐形价值。

    待续...
    下一部分会讨论如何增加账号的隐形价值

    相关文章

      网友评论

        本文标题:在区块链上借钱给机器人(2)

        本文链接:https://www.haomeiwen.com/subject/mrgtfftx.html