美文网首页
solidity面向对象(一)

solidity面向对象(一)

作者: OpenCoder | 来源:发表于2018-10-11 16:07 被阅读0次

    【传智播客.黑马程序员训练营成都中心】

    什么是solidity?

    Solidity是一种面向对象的智能合约高级语言,运行在以太坊区块链平台的虚拟机(EVM)上。我们可以使用solidity来编写智能合约。

    什么是智能合约?

    要说智能合约那不得不提一下我们熟知的传统合约。

    在我们的现实社会中,我们会遇到很多场景去签一些合同,以约束双方的经济行为,但是即使我们签了合同,也无法保证在合同期内双方就一定能完整履行合同内的承诺。这样就出现打官司,找第三方介入调查,取证,耗费大量的时间成本和物质成本来证明对方的违约的事实。如果第三方作恶,如果调查某一环节作恶,如果合同被盗,如果当事人跳楼,死无对证,等等任何一个如果都可能对结果或者时间成本又或者经济成本带来大量的损失。

    传统的合约会受到各种维度的影响,自动化维度,主客观维度,成本维度,执行时间维度,违约惩罚维度,适用范围维度等。

    智能合约在很大程度上解决了这些问题。

    你只需要提前规定好合约内容,程序就会在触发合约条件的时候自动执行合约内容。

    不过因为技术原因,智能合约的理论在很长一段时间内是无法实现的。因为及时是智能合约也需要人去监控,如果监控者作恶私自修改了合约怎么办呢?区块链的出现可以解决这个问题。

    区块链的特性

    什么是区块链,建议大家去网上搜一搜,这里篇幅较小就不详细介绍了。

    我们直接来讲区块链的特性:1.数据无法删除、修改,只能新增,保证了历史的可追溯,同时作恶的成本将很高,因为其作恶行为将被永远记录。

    2.去中心化,避免了中心化因素的影响。

    智能合约的应用场景

    基于区块链技术的智能合约的应用场景并不单一,一个合约可以被写入到区块链中,那么任何人想要私自修改合约或者作恶都会会变得非常难。而且基于区块链的特性,每一份合约都具有可追溯性,保证了存储读取整个过程可以追踪。区块链自带的共识算法构建出一套状态机系统,使智能合约能够高效地运行。

    • 举个应用场景的例子:
    1. 阿尔法星球是一个基于区块链交易系统的星球。星球上的居民司马光打算向贝多芬租车一年。车的钥匙是智能密码钥匙。租期1年,分期月付。每个月10000元。
    2. 司马光和贝多芬的智能合约被提交到智能合约服务器上发布到区块链中生效。
    3. 贝多芬把开锁秘钥和自己的账户地址提交给智能合约服务器。
    4. 司马光向服务器支付房币作为抵押
    5. 合约开始执行,服务器从司马光的抵押资金中扣除500元价值的房币,发给贝多芬的账户,并把房子的开锁秘钥发给司马光,记录记到区块链。
    6. 每个月1号智能合约都会检查租约时间,没到期,就会自动扣除租金,然后把新的开锁秘钥发给司马光。
    7. 如果租约到期,服务器就会生成一条合约纪录,标志合约终止,并发布到区块链上,合约终止。
    8. 整个过程受到阿尔法星球监管者的监管,监管者在区块链上随时查看合约执行情况,任何人无法私自改变合约。
    9. 这样司马光和贝多芬什么都不用做,一个公平的生态就能促成他们交易。
      其实上面引用的例子,利用传统的技术也能完成功能但是无法保证公平和传统合约的有效。
      引入区块链可以保证合约的有效和清晰透明,任何人哪怕是监管者也无法改变链上的合约。任何单方面的修改合约都会被记录在链上。

    面向过程

    在学习面向对象之前呢,我们先来回顾一下面向过程.
    C语言是面向过程的编程语言.
    面向过程:自己按照顺序一步一步的去实现某件事情,这样一种方式我们通常称为面向过程.
    例如:肚子饿了,我要吃饭.
    面向过程:
            1.换鞋子
            2.下楼
            3.去菜市场买菜
            4.回家
            5.洗菜
            6.煮菜
            7.煮饭
            8.吃饭
    类似以上的操作则被视为面向过程的方式
    

    面向对象

    面向对象的编程语言有很多:c++,java,c#,ios...等等
    面向对象:面向对象并不是简单一句话就能让人完全理解的,理解面向的理解对象需要时间的积累.
    例如:肚子饿了,我要吃饭.
    面向对象: 
             1.我的手机开机----手机的功能
             2.点外卖----手机的功能
             2.吃饭
    我的手机 : 一个对象
    手机开机:手机的功能之一,对象的行为之一
    点外卖:手机的功能之一,对象的行为之一
    开机是手机的功能,点外卖是手机功能,我只是在使用手机这个对象去调用手机中的行为而已,手机开机和点外卖是怎么实现的我不管,我只要能拿到手机这个对象,我就可以做这些事了
    

    类是一个抽象的概念,他把相似的属性和行为抽象出来,形成一个类.
    类实例化可以获得多个对象
    我的白色iphone是一个对象,白色和iphone是对象的两个属性.
    手机则是一个类,我的白色iphone手机则是该类的一个对象,小明的红色魅族手机是该类的创建出来的另一个对象.他们都属于手机这个类(类型)
    

    solidity去实现一个类

    java中:

    class person{
    
    }
    

    solidity中:

    pragma solidity ^0.4.0;
    contract Student{
        
    }
    

    pragma:版本声明

    solidity:开发语言

    0.4.0:当前合约的版本

    ^:向上兼容,用高版本的也能编译

    solidity声明属性和方法

    pragma solidity ^0.4.0;
    contract Student{
        uint _height; //身高属性
        uint _age;//年龄属性
    
        //构造函数,方法名和合约名相同,在创建对象时构造函数会执行
        function Person(){
            _height = 170;
            _age = 25;      
        }
        
        //普通设值函数,可以对age属性进行修改值
        function setAge(uint age){
            _age = age;
        }
        
        //获得age属性的值的方法
        //constant:方法只读
        //return (uint) 代表返回值类型
        function age()constant return (uint){
            return _age;
        }
        
        //Solidity语言支持在一个函数中返回多个结果。使用return (a, b, ... n);来返回多个值。
        
        function ff(uint a)constant return (uint,uint){
            return (a+1,a+2);
        }
        
    }
    

    以上则是solidity的类的声明,属性的定义,方法的声明介绍啦.

    总结

    今天我们主要是了解智能合约,以及编写智能合约的solidity如何编写一个类和一些基础的语法规则。谢谢观看。
    

    相关文章

      网友评论

          本文标题:solidity面向对象(一)

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