区块链字符说白了, 其实就是指在链上的数据里面, 那些字符串的编码以及存储的方式。

很多开发人员在编写智能合约的时候, 心里面总觉得字符串就仅仅是字符串, 把东西往里面放一放就觉得完事大吉了, 结果导致 Gas 费的计算让人算不明白,而且数据还读不出来, 这事情如果不搞清楚的话, 后面的环节全都是一些坑。

区块链字符怎么编码

在智能合约的底层实现里, 字符串其实是以字节数组的形式来存储的。以以太坊为例, 它使用的是UTF-8编码方式。在这种编码下, 一个中文字符需要消耗三个字节的空间, 而一个简单的英文字母只需要占用一个字节。我曾经编写过一个智能合约用于存储用户的昵称功能。

区块链字符怎么编码和存储,链上字符串长度限制你搞清了吗

在对这个合约进行测试的时候, 因为全部使用的都是英文字符, 所以一切都很顺利并通过了测试阶段。然而, 到了正式上线使用的时候, 我把输入内容切换成了中文, 结果发现Gas费直接翻番了大约三倍的用量。这种情况甚至差点导致整个区块被塞满而无法正常运行。

先把那些代码的格式在往链上去存数据之前给固定好了, 千万千万不要让智能合约自己去搞什么动态转换编码那一套, 如果你去仔细算算那需要消耗的Gas费用的话, 你会被吓一跳。

Solidity这个编程语言里面的字符串类型本来就是一个长度不固定的东西, 每一个字节都需要去算存储成本。一个三十二个字节的存储空间刚好足够放置短小的ASCII码字符串。如果超过了这个限度就跳槽到别的存储空间去存放。

我们一般情况下都会把存放在区块链上的字符串内容控制在二十个汉字长度以内。如果比这个还长就把内容放到IPFS这个系统里面去只存储哈希值。这是经过了多次实际教训总结出来的重要经验总结。

区块链字符能存多长

实际的限制情况取决于你所选择使用的区块链。以太坊上单笔交易的体积上限是21MB, 但是合约存储里面每一个插槽的大小是32字节, 当数据量超过的时候就会线性地开启新的插槽, Gas成本是按照阶梯方式计算的。在BSC平台那边容量稍微宽裕一点, 但是其基本逻辑也是一样的。

后来我开发了一个辅助工具, 专门用来处理那些想要永久保存下来的字符串数据, 操作者只需要把具体的一段字符内容塞进这个工具里面, 系统就会立刻给出计算结果, 明确地展示出这串字符在底层技术架构里到底要占用几个存储位置的空间单元, 以及这笔交易需要消耗的大致能源计量数值是多少, 别靠猜,拿数字说话。

直白地讲, 在区块链上存储字符就是在与gas费争夺资源空间, 既然费用昂贵, 就要尽可能缩减长度, 如果可以的话就放在链下存储, 把字节当作金钱去花费。