而合约包含的数据是单独存储的,是链下数据。Ethereum维护一个World State,包含所有账户的最新状态(nouce、balance、智能合约定义的其他字段等)。World State的数据也是不可修改的immutable
,相反,它是一个默克尔树结构,所有的变更都会产生新的hash,并最终产生新的root node,而root node被包含在区块链上对应的交易中。从而保证了链下数据的不可篡改性。底层需要一个KV数据库来支持。
对于Ethereum来讲,存储以及存储的读写消耗gas的。如果如果要在Ethereum上存储数据,要考虑到这个开销。更一般地,应该只把关键数据放到Etherum,而把其他数据单独存储,而只在Ethereum存储其标记。比如只存储用户ID,而把相关信息放到关系型数据库。