欢迎光临
我们一直在努力

区块链:solidity智能合约开发 测试题

私有、内部、公共和外部函数之间的区别

        private:私有,当前合约对象可见,继承合约不可见

        internal:内部,当前合约以及继承合约可见

        public:公共,内外均可见,会自动生成getter方法获值

        external:外部,只对外可见,gas消耗少,减少evm上下文切换


智能合约大小大约可以有多大?

        无硬性限制大小,过大可能需要多区块部署

                以太坊:理想情况下小于500k,极少数情况可能允许达到几MB

                Binance: 要求相对宽松,推荐不超过1MB

                Solana: 由于其独特的高性能架构,可以支持更大的合约

                一个典型的合约大小应该控制在24k以内:

                        较小合约小于16kb,可以很好地传播和执行

                        中等合约16-24kb,部署和执行需要更多gas

                        超过24k,可能会遇到gas不足或无法部署的问题

                性能消耗:可根据部署gas消耗,区块gas限制,区块大小等因素调整,使用合适的数据结构来进行优化,较大的合约意味着较大成本以及网络延时


create和create2之间有什么区别?

        1.地址确定性:

                create部署新合约,新合约由创建者地址,创建者的nonce值以及部署合约的字节码通过一个确定性的计算得到,因为nonce在变化,所以无法预先确定新合约的地址

                create2部署新合约,新合约由4个参数通过一个hash函数确定:创建者地址,盐值salt,初始化代码和部署合约的字节码

        2.重新部署:

                create无法保证同一份字节码连续部署两次会得到同一个地址

                create2,只要4个参数相同就会得到同一个新的合约地址,在可重入地址场景非常有用

        3.版本:        

                create指令在EVM最初版就有了,

                create2实在EVM的Byzatine分支中引入的,用于增加地址确定性。对于一些复杂的智能合约应用状态分片,钻石模式等非常有用


  solidity 0.8.0对算术运算有什么改变?

        1.上溢和下溢不再环绕,而是直接revert

        2.除数为0会revert,不再是返回0

        3.引入新的位移运算编码:

                `>>>` 无符号右移

                `<<` 左移

                `&` 按位与

                `|` 按位或

                `^`按位异或

                `~`按位取反


以太坊主要使用什么hash函数?

        1.keccak256:基于keccak256算法,输出长度为256位(32字节)的哈希值

                计算交易和区块的哈希值

                计算状态树的节点哈希

                生成账户地址

                构造合约地址

                其他需要加密哈希的场合,数字签名等

        设计目标是抵御各种密码学攻击,如长度扩展攻击,冲突攻击

        2.rlp:编码哈希方案,用于对复杂的非规则数据结构(字符串,列表等)进行编码和解码,

rlp常用于编码区块头,交易数据等复杂数据结构的哈希值计算,保证该复杂数据结构在网络传输和存储是保持一致性和不可篡改性

        3.sha256:用于挖矿过程中的工作量证明


solidity数据结构:

        int        有符号整型

        uint      无符号整型

        bool        布尔类型默认false

        address        地址类型

        bytes        字节类型

        mapping        映射

        struct        结构体

        emnu        枚举类型

        array        包含定长不定长数组


静态类型语言:即在编译时可确定变量数据类型如solidity,java等

动态类型语言:在运行时确定数据类型的语言如python


什么是Gas费用,如何优化Gas消耗?

        Gas 费用是执行合约操作的计算资源的度量单位,每个操作都有对应的 Gas 成本。Gas 费用直接影响合约的执行效率和用户的交易成本

        优化:

                减少链上存储

                优化合约代码:

                        优化合约计算逻辑

                        使用更合适的数据结构

赞(0)
未经允许不得转载:171主机测评 » 区块链:solidity智能合约开发 测试题
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址