solidity 学习

简介: solidity 学习
pragma solidity ^0.4.0;
contract Person {
 
    //属性的默认权限是internal 方法的默认权限是public
    //只有public 权限的属性可以供外部访问。其他需要get set访问
    //通过this(指针)只能访问public的方法。其他权限的方法可以通过方法名()直接调用
    //只有public权限的属性和方法才能通过合约地址去访问。
 
    //继承
    //只有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是写到区块链中的。
}
相关文章
|
3天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。
|
4天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
365 91
|
4天前
|
SQL 人工智能 自然语言处理
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
随着生成式AI的普及,Geo优化(Generative Engine Optimization)已成为企业获客的新战场。然而,缺乏标准化流程(Geo优化sop)导致优化效果参差不齐。本文将深入探讨Geo专家于磊老师提出的“人性化Geo”优化体系,并展示Geo优化sop标准化如何帮助企业实现获客效率提升46%的惊人效果,为企业在AI时代构建稳定的流量护城河。
379 156
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
|
5天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
4天前
|
数据采集 缓存 数据可视化
Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路
本文深入探讨Android无侵入式埋点技术,通过AOP与字节码插桩(如ASM)实现数据采集自动化,彻底解耦业务代码与埋点逻辑。涵盖页面浏览、点击事件自动追踪及注解驱动的半自动化方案,提升数据质量与研发效率,助力团队迈向高效、稳定的智能化埋点体系。(238字)
261 156
|
12天前
|
机器人 API 调度
基于 DMS Dify+Notebook+Airflow 实现 Agent 的一站式开发
本文提出“DMS Dify + Notebook + Airflow”三位一体架构,解决 Dify 在代码执行与定时调度上的局限。通过 Notebook 扩展 Python 环境,Airflow实现任务调度,构建可扩展、可运维的企业级智能 Agent 系统,提升大模型应用的工程化能力。