今天继续看一下 cairo2.2的构造函数,事件
构造函数必须用 #[constructor] 修饰,每个合约只能有一个。
事件用的是 #[event]。
使用事件成本更低
事件不能从合约内部读到。
这次测试的合约有一个奇怪的点,合约只有一个owner变量,值构造函数中初始化,把调用者的地址赋给 owner, 这是一个在solidity里非常常见的操作,读出来的owner就是部署者地址。但是starknet部署后,owner被设置成一个找不到出处的地址,不知道坑在哪里。
例子:不明白读出的owner : 0x41a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf ,这个地址是哪里的,个人账户里根本没有这个,看来部署的地址不是用的列表里这些地址。
那是用的哪里的账户呢?
解答:
诡异点原因已经找到 , 原来startknet所有合约的部署者都不是账户合约,而是一个统一的部署合约 Universal Deployer Contract (UDC).
上面read_owner读出来的合约地址就是 默认的UDC合约。
参考:
Universal Deployer Contract proposal 🪄 - SNIPs - Starknet Community Forum