Solidity智能合约开发 — 3.1-合约创建和函数修饰器

在创建智能合约时,会执行一次构造函数(与智能合约同名的函数)。该构造函数是可选的,但只允许有一个构造函数,也就是不支持重载。

1、合约创建

1.1 构造函数

初始化合约的owner地址:

   address owner; // 定义owner变量
   bytes32 name;  //定义合约创建者名字

   // 构造函数
   function OwnerToken(bytes32 _name) public {
      owner = msg.sender; // 在部署合约的时候,将owner设置为部署者的地址
      name = _name;
   }

1.2 函数可见性控制 

函数和状态变量有4种可见性类型,分别为external、public、internal和private

  • external:外部函数作为智能合约接口一部分,该函数可以从其他智能合约和交易中心调用。一个外部函数f不能从内部调用(即f不起作用,但this.f可以)。
  • public:可以在内部或通过消息调用,对于公共状态变量,会自动生成gatter函数,gatter函数介绍见下文。
  • internal:这些函数和状态变量只能内部访问,不能使用this调用。
  • private:private函数和状态仅在当前定义他们的智能合约中使用。

对于所有public的状态变量,Solidity编译器提供了自动状态变量生成对应的gatter(访问器)的特性。gatter函数的可见性是external的,如果从内部访问getter(即没有this),他相当于一个状态变量。如果它是外部访问的(即用this),它被认为是一个函数。

contract C{
    uint public data;
    function d() public{
        data = 10; //内部访问
        uint val = this.data();//外部访问
    }
}

2. 函数修饰器

修饰器的关键字是modifier。modifier的可以改变函数的行为,也可以在运行函数前的自动检查某个条件,例如地址,变量,余额等。下面是使用函数修饰器的列子

1. 定义一个叫做onlyOwnermodifier

   // 定义modifier
   modifier onlyOwner {
      require(msg.sender == owner); // 检查调用者是否为owner地址
      _; // 如果是的话,继续运行函数主体;否则报错并revert交易
   }

2. 带有onlyOwner修饰符的函数只能被owner地址调用 :

   function changeOwner(address _newOwner) external onlyOwner{
      owner = _newOwner; // 只有owner地址运行这个函数,并改变owner
   }

如果同一个函数有多个修饰器,它们之间用空格隔开,修饰器会被依次检查执行。修饰器或函数体中显式return语句仅仅跳出当前的修饰器和函数体。整个执行逻辑会从前一个修饰器中定义的“_”之后继续执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Solidity智能合约开发实验中的实践项目中,我们创建了一个简单的投票合约。该合约允许用户创建投票,并为每个候选人投票。我们将讨论实验结果和分析如下: 1. 合约功能实现:我们成功实现了合约的基本功能,包括创建投票、为候选人投票、获取候选人得票数等。合约在以太坊区块链上部署后,可以被用户调用并执行相应的操作。 2. 投票操作:我们测试了多个用户对不同候选人的投票,并验证了合约正确地记录了每个候选人的得票数。通过合约的查询功能,我们可以准确地获取每个候选人的得票数。 3. 安全性分析:我们对合约进行了一些基本的安全性分析,确保它没有明显的漏洞。例如,我们防止了重复投票和未注册候选人的情况。然而,这并不能保证合约完全安全,因为Solidity编程语言本身存在一些潜在的安全问题。 4. 性能评估:我们测试了合约在处理大量投票时的性能。我们发现,在处理数千个投票时,合约的执行速度较快,并且能够快速更新候选人的得票数。 5. 可扩展性分析:我们考虑了合约的可扩展性。尽管我们的实验中只创建了一个简单的投票合约,但我们通过使用合约中的动态数组和映射等数据结构来支持更多的候选人和投票。 总体而言,我们的实践项目取得了成功,并且满足了设计和功能要求。然而,我们仍然需要进一步的测试和安全审查来确保合约在实际使用中的可靠性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值