solidity 学习

原创 2018年04月16日 20:09:13
pragma solidity ^0.4.0;
contract Person {

    //属性的默认权限是internal 方法的默认权限是public
    //只有public 权限的属性可以供外部访问。其他需要get set访问
    //通过this(指针)只能访问public的方法。其他权限的方法可以通过方法名()直接调用
    //只有publis权限的属性和方法才能通过合约地址去访问。

    //继承
    //只有private 权限的属性不能被继承
    //只有public 权限的方法才能被继承

    // storage 指针传递 memory 值传递

    function age() constant returns (uint) {
        return 26;
    }
    function weight() constant public returns (uint) {
        return 180;
    }
    function height() constant internal returns (uint) {
        return 172;
    }
    function money() constant private  returns (uint) {
        return 32000;
    }
}

pragma solidity ^0.4.0;

contract Person {
    uint _age;
    uint _height;
    address _owner;
    //属性==>_age,set方法==setAge get方法==》_age()
    function Person(){
        _age = 18;
        _height = 180;
        _owner = msg.sender;
    }

    function owner() constant returns (address) {
        return _owner;
    }
    function setAge(uint age){
        _age = age;
    }
    //constant 代表只读并且有返回值。 创建实例的时候就会调用带有constant的方法,只要往区块链写入信息都需要付gas
    //同一个钱包地址创建同一个合约不会重新写入区块链,只会返回以前的部署的合约。
    //public inernal(默认权限) private
    function _age() constant returns(uint){
        return _age;
    }

}

pragma solidity ^0.4.0;

contract Person{
    uint _age;
    uint private _height;
    uint public _sex;
    //public 属性会自动生成一个get方法 如果手动重写方法可以覆盖掉自动生成的方法。
    //private  internal

    function _sex() constant returns (unit) {
        return _sex;
    }

}

pragma solidity ^0.4.0;
contract C {
    bytes9 public g = 0x6254454541545845;
    string public name = "yujunlong";
    bytes public b = new bytes(1);
    bytes1 public bs1;
    bytes32 public bs32;

    function getByteLength() constant public returns (uint){
        return g.length;
    }

    //string==>bytes
    function nameBytes() constant public returns (bytes) {
        return bytes(name);
    }

    function nameLength() constant public returns (uint){
        return bytes(name).length;
    }

    function setNameFBF(bytes1 z) public{

        bytes(name)[0] = z;
    }

    function setbLength(uint len){
        b.length = len;
    }

    //b ==0x64
    function setbData(byte b1, uint index){
        b[index] = b1;
    }

    function pushByte(byte b1){
        b.push(b1);
    }

    //后面补0
    function b1Tb32(){
        bytes9(bs1);
    }
    //截取后面的
    function b32Tb1(){
        bytes1(bs32);
    }

    function bytes32Content(bytes32 x) constant returns (string){
        bytes memory  bytesString = new bytes(32);
        uint charCount = 0;
        for(uint j = 0;j<32;j++){
            byte char = byte(bytes32(uint(x)*2**(8*j)));
             if(char!=0){
                 bytesString[charCount] = char;
                 charCount++;
             }
        }
        bytes memory  bytesString2 = new bytes(charCount);
        for(uint j = 0;j<charCount;j++){
            bytesString2[j] = bytesString[j];
        }
        return string(bytesString2);
    }
}

pragma solidity ^0.4.0;

contract Person {
    string _name;

    function Person(string name){
        _name = name;
    }
    function setName(string storage name) internal{
        bytes(name)[0] = "Y";
    }
    function modifyName(){
        setName(_name);
    }
    function name() constant returns (string) {
        return _name;
    }



}

pragma solidity ^0.4.0;


contract Person {
    //对象的属性默认是storage 都是要写到区块链中的
    //任何修改状态变量的方法都不能使用constant这个关键字
    //属性的任何赋值都是需要写入到区块链的。
    uint _u;
    bool _b;
    string _s;
    address _a;
    int _i;
    byte b;
    bytes1 b1;
    //长度不可变,内功不可变
    bytes2 b2;
    //固定长度的数组,内容可变,长度不可变
    byte[2] b22 = [byte(0x6c),0x79,0x87];
    bytes32 b32;

    bytes bs;
    //可变
    uint [] T = new uint[](5);
    uint [] TT = [uint(1),3,4];
    //固定不可变
    uint [3] TTT = [uint(1),3,4];



    function Person() {
        _u = 10;
        _b = true;
        _s = "yjl";
        _a = 0x07d62de1141cb58c35e76ab0e4d58903d8812b59;
        _i = -10;

    }


    //
    function f() public {
        uint[3] memory x = [uint(1),3,4];
    }

    //int = int256 有符号 uint = unit256无符号
    //int8-int16-int24...-int256
    //unit8-unit16-unit24...-unit256
    //11111111-01111111   0-01111111
    //_a**_b _a的_b次方
    //-a<<_b==>-a*(2**_b)
    //-a>>_b==>-a/(2**_b)
    //address 40位的4位等于160位==unit160

    //address(unit160) unit160(address)

    //payable 转账关键字 有转账api的时候要在方法后面加上这个关键字。

    //bytes1 = byte  1个字节 8位00000000 a = 65

    //bytes ===string

    //delete 关键字清空bytes 数据
    //固定长度的字节bytes1~bytes32的length的方法返回的是该字节固定的长度,而不是根据内容的变化而变化。

    //0xff==11111111==255
    // 数字默认uint8 需要强转为uint==>[uint(1),3,4]

    //方法中创建的对象默认memory类型。状态属性默认storage

    //memory 是放在内存中,没有写到区块链中的。storage是写到区块链中的。
}

Solidity基础语法学习

Solidity中的契约类似于面向对象的语言中的类。每个合约都可以包含状态变量,函数, 函数修饰符,事件,结构类型和枚举类型的声明。此外,合同可以继承其他合同,在Solidity中每一个类都被称为合同...
  • liaodehong
  • liaodehong
  • 2018-01-19 16:54:40
  • 580

学习Solidity官方文档的笔记一

极客学院翻译的中文文档链接:http://wiki.jikexueyuan.com/project/solidity-zh/对一些demo尝试用基于浏览器的编译器跑一下在Solidity中,一个合约由...
  • ler_123
  • ler_123
  • 2017-01-10 10:51:25
  • 895

教练,我“只”想学`solidity`

教练,我“只”想学soliditySmart Contract(智能合约)才是Dapp(去中心化应用)的核心,不是nodejs。如果你想要研究Solidity,但沒碰过nodejs,那么本篇是专门为你...
  • liyuechun520
  • liyuechun520
  • 2017-09-05 08:15:07
  • 279

Solidity学习(1)

1.概要Solidity是契约导向的实现智能合约的高级语言。 它受到C ++,Python和JavaScript的影响,旨在针对以太坊虚拟机(EVM)。 Solidity是静态类型的,支持继承,库和...
  • sunniy27
  • sunniy27
  • 2017-11-30 20:22:52
  • 636

从 Demo 中学习 Solidity

从 Demo 中学习 Solidity [注解译文] 前 (全文参考) Solidity官方文档 以太坊白皮书_ZH 以太坊白皮书_EN 发现网上的资料太过琐碎, 惊奇的发现官...
  • zz709196484
  • zz709196484
  • 2018-01-27 00:08:33
  • 384

Solidity学习(一)

使用Remix作为开发工具,Remix是基于浏览器的IDE,提供了集成的编译器和Solidity的运行环境. 地址是: https://remix.ethereum.org 首先在左边新建一个...
  • jiajingda
  • jiajingda
  • 2018-02-03 15:57:33
  • 66

Solidity的CURD

相关工具Solidity:https://github.com/ethereum/solidity Web3.js:https://github.com/ethereum/web3.js Geth...
  • koastal
  • koastal
  • 2017-12-10 15:35:08
  • 355

【Solidity】Solidity by Example

投票以下合同相当复杂,但展示了很多Solidity的功能。 实行投票合同。 当然,电子投票的主要问题是如何将投票权分配给正确的人,以及如何防止操纵。 我们不会在这里解决所有问题,但至少我们将会展示如何...
  • diandianxiyu
  • diandianxiyu
  • 2017-09-06 11:01:26
  • 1266

Solidity Documentation

  • 2017年12月27日 09:26
  • 622KB
  • 下载

智能合约编程语言solidity的特性

solidity特性1、异常无法捕捉 2、函数返回值可为多个 3、包括Address等特殊类型 4、返回值声明可放在函数声明上 5、运行函数会消耗gas、gas不足会导致智能合约无法运行 6...
  • j1097376869
  • j1097376869
  • 2017-05-23 00:28:17
  • 353
收藏助手
不良信息举报
您举报文章:solidity 学习
举报原因:
原因补充:

(最多只允许输入30个字)