如何部署链上nft和复杂/长svg的智能合约?



我想部署一个在链上创建nft的智能合约,这意味着图像/svg的数据,在我的情况下,存在于区块链上,并且由于Base64加密,它将是可绘制的。我研究了这个主题,但我不知道如果svg足够大,导致"合约代码大小超过24576字节",如何使智能合约可部署。错误。

在我的特殊情况下,我需要在SVG中使用的字体,导入它的唯一方法是:

@font-face {
font-family: "Titan One";
src: url(data:application/octet-stream;base64,d09GMgABAAAAAAyEAA8AAAAAFFQAAAwvAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbVhwoBmAARBEICp0clxYLTgABNgIkA4EYBCAFg2wHIAwHG/oPI5KT1h6SqSN14c+ff78fv816GdgeTegJlVUzYM5Eku3fy4pRamornklORP6VIdzWGchgm0EOeiAgSJQFFmGB2R9WDeOjI+F52N973p1YPzU4LQGIgiKEJGWFiLylMv//j5VOlObxKACcuf9P/TdRW5VUIAXYuBqdREt7FmTBfG1BahHPZsrvnSyYnWhzIADghVqGBSSn6aODAFCYBkvA2rZjnx9uf/6R119kcXCLeF8VjZ574tUXwTNjgyw3WK2AB8grlUXAZ0dM3kiJ/G7ROANmKH3IvFZR1resyeQ0jIACq91CDB6fNCJfwBL4O8T+5bCpS6d6+Z1XX4NNMGmKz3UxchjAdRGqqJnA2mYN0iRVDKSuQBwSQa0bFmV5wLO7ahKshneJrDwJFsEjkUjkm8jNSJkVVjYlQCIRuGNBM1LpPskyjftKStT4esQjy08rkQkGAReGrBXvZsSSiBDOYL0H9MXETl/gc02YGJXg80SNi5obPSZq0gw2zjNjIZvmve1Oz0Tvkim+22dFj2Hf6rlTJ42ePnXu6G9Qb9BE2F1GOusd4P72YEimGaFTMa4c+HcKG4mLoliaZmRDQXwI3PehJuKaYSeAq+urmpcxGcrh2XHJcXFeJMK+ZohA9Rb3hzpG1wBXFPVFIkwVk44kItiYUChmhpkhAhVFTcTeS+zEXwobCaFIxGcL0wyT4H7S9tvCMOnIMiKCjYksRgJX1Asy4HBFUf9kpNMxvoZnq8uKok40TDrAFcUZGqshHEDOpPhOYSMR91GckCoMi5GjU7j62P8SP0nE1iRNhDnhAFdxPV+nyDSRiem2FBS5jZoIu8ow6RxTFDUJost0R9aR88rmniCAB0q1MNdWGsbEnCRUzSJXNtK50FMxOgMsrrAwKWEKVTbBcuBMhu1BMsLItQD8LNw2s01e6BhfA1yp4zaTiZTahVfn6Iu11UDWQmM5r5GVWgQDeLG1NndCLoEmcn0ongVnpbND4Ha0f/qsZluOdYlCisCdxzhTbKL1zdoxmefYBUsC9wZBdhFB8akgcWmXIKKOMWFurbzEK1QUB/VF/NKVq+ljhJ7PV6g7J9QScbTMyAvxJaPj2cQsJkeHUipaQ3FPITlG0bYgZBOS6r/aJTTFY8GrHp8dwsy0mZdIsV3iuVFmI3FxRDDUFY6LbxReFTObyrYsA9Znx4kw0oFLyU9gisUOK7junLfVwVnwnJvvDb9nsZTieVikjEkKhLlaSo4fz+rsIiYDaXbCr22dPDUhVSTFeeQxgWTcueFzOx2SYSNyUxOS8LziAdygIT40mYWr2i5Jp8fJYFuo6lndFC8mlI5JoAGob/GTxlEWZ5J814+694jCWmL6wEV8NyE25cX34jEmi4gr6SkKBVlGdiS4LaqLH8Fgq9YxZJFoHdQXtcgy14x0BqYXXG6c/KUGHMcB/g3qNfruEpnnmCkkAS7rahR4i8wAHkB9oquAO0w6Y1Q6JQRp+qzzw/fd79eR4+9h96UZeSGFq7uTKRYm6E/fS8YxQepfSX4q+DI7MTog13R6C/CPH0t/NIQ97CIvxAeYHW67CdOV34EyihOCV1hJ7wRNyIU5hbEW915d1WWvceW/RoNek7h1/z0bFiM7PIUvj9P37vv64wf3/fDS+IyXx//w4L6Pv753n/74+Ptj/46+rzT6wf/Hfrg4NwfSve943/0hFbqhOmgS1X5S1BjBTaynDgRdD/FDBsf4X+rLc4lORuq6zKo9Pf6E360vGVMaXm2M3xZ3lDWwq09WHk9Y3FUDophVGYYlsk0PHM1za0Y5e7D+IBHsnEv+vl2knYTKSm9Cn7goyRBS6aUQFtQpSWzZUD531p8+YmBDeiK9VGjvX5Jl9EWiNxtmC1z9dQNJLHAz4SYQ2G3SWpZfmz7yYUDEKQq+At/FzdTTWtmY5mB2jN14bHLPxfVDdSBmTxqnwslvWMAkRkgS1jeKU+bOXzN46qqZdbOETK58YCBpiAMlvoWZhdmC6wLRdTAM6Yf04aLMYSvO+vcPT2WUsycZji6I0FxMNgSkgfb7Lwte1n05x3TJ2iZ2xiZ1bpMxXee+uBf+w99VPsA/iPeIuovw7uDM7/zCPtX5EYnXOrRZ8+cuHjd5xezG6VwmRz4wkDQ4mdLwQ3ernJHSW3BWIDoLHkAlFpswoVyd8HV1fGA6rtywzeDk3IJoMeUKNEU5TDKglLF2YFJGZbgGrkfqnhZwekBYEXNpB/c33y5E34AiShO/F6tDaSvUeqhOqJCCbas/5VoQkjc2bur4GL8Rk0RiEy4EiwN7NQiUSe3JGsIWs9gpSmgvluYLO3OgTNz6bvgGa4GCRJcUScNbVPvBPUj2dfzVD6Zc5+iqCUUlo0amQbCzL6tFaXMq66jH4Gak5lgN1AMatFyomhjYBlNdkGRODs0JlA9tscFteh96jIenmK+YWc2ODyYRTbN128qdj9p4GX837OZLJtoFaXi0SAqqUoxwE7IAM5p4JcHjGLhDXlHZMt21K8bOyWFREJYlhOoeyitUNNMBYbNA5th0ToVDULqUWtWOhrgk+a13dpshaNjMKfbLvc3Mxd1m9p46b9zYAEzuCfLt5qZ3Iiumw/ep58w0eV8LLQHUsFlu2MFm8EbBbUivX+hWZpsy3oEVUCZTneQr9/vaO9l7jDDD7UjPXyDM9y3civRUobdZhMpRMvy63SU3FWNbQI24ueehyoGDgk9KF7MIlb1Ut9r3L1ZicsmGJUrMQI+0IL0s6BYWobSVaruhuidsy+IwHMsYvmrcKrFwa56Mpshn5c+rAPq7x2AP0lOFbmERSlspsOIuI0wgPS0oc7yAfDtgJEwgvVQos+VqHUznjYQ9SE8V+pbZqhzQPpp8ws7eoS5UFJ2tscZVOHuBvm4z7Nm7V6ymQdWVxueNggmkpwWV/QJPJrJOSKsSe4B8yN3A2VBs27Kg1JkfN8qaQ82XpuGN7hmrZ6yZ95bzFklqcrUUjuH8Q5OHAUmPPsyWUJtQEB6+BMK+ki/lOIIBzaXOI2UH5N2tvVgk9t4zykyB0CIP3Ir07OX+H+QIbvPj8qSzQZRfer5bPPFYaMnaedM2VeShUxsFI+BmZAHmgZ0QZEUWiY0SKIrCqwB6azBMEP3poTeHDm6bS75aZ65fGEbOEnbiUOsECT7ACC1LFXUOVOqaaNTW0IyRAmKrM2i3It5t5ttTmvFRpVAadI6miKjCmyRcFRYwLiMgkx/pthwBM8kDcgILk/Wz5xjhv5ljGOKeoh4yS4lmoovrNjTTrNt516QeiQO8hojCtgmBjI5gW4HmXyrsxMS8WmZv6SSFj39fuFcAJR4avOx2V+D7hzqhgqfvosViUKYGGyqrxi/55+7vFzl9pv5WqnPtWCMwLMCOf03Ct/qLtirW6F+V7jyhn2B05GvwIAS+A1XIqkO8qB9gMVAMkHfde1Xos+UhMMg6Fg2iMZCcvrme+Tep9NHKzoma0BmUgPGkI26adIjGP21AWuvSB6jCs75DPogM2uKtkDMuhVPi5BMraPHdRzE7QmwFmn4nxHQel9k3ZILi5n3t/HFjAzAFEeTbkUKveApoq/2ze2TXLeQkajmJ9PU8VnkEUtqjtGkmJ1GLJTKm6kHJo5Gl7elrjd07BUR/hWCfF9tKT2sopycd/u/6n0Wq9TkF/HefafCYYUHSsP+7/q8m1f7q8zJD7qUGiYffV5Bv9MonQVKPXqrQSzNBUoNeNtCLBl9ZXSy2hV72sIgdFWuqkklUEslzweLbWJRyLMoSyCiTlDi5fWGR45hcQWATNt9EJVlYpAaV8oevXLDGl3i4/eAx6SLrWCQBFUmLnSq8eBSGzUgC7Uxv6iOdmLsP5nzwtkB8FroFmxDIic2NFMqHuvNtHqhJsXkSTJwIjHsuQSO99NJJPJFE0kMN3TTRSW+ijaDnuVqJoINuGogknzRyKKGJXqpoJ5926iijjm6543XQjpFoIogiimiK6KDW2mc20EEafdTRzjBVtNJELVXEYyxCRsAOitEGvlUdDfTRShXdci2T6aCTIQ84lPmNOKnBlY5kJDG6EaHzUY3U0UorHSTQTb3EdhHU0EEbLsIwMkCFGq1n1dFzEqr6qaO2jVMBKg3zqKKNOhzNTJ7MUa27PtX/EzGUjV+V/7lb93kA);
}

我已经通过只取我需要的字符来减少字体字符,但只有这一行会导致前面提到的错误。

有谁知道如何处理这个问题吗?有什么参考吗?任何事情!我知道这是可能的,因为这个链上的nft项目Edwom比我的svg日志记录器(即使使用相同的长行字体)。他们使用某种字节16序列汇编,我不懂,我不知道这是不是最好的方法。谢谢你的帮助。

如果问题是合约大小,一种选择是部署不含SVG部分的合约,那么在部署合约后,您只需要一个函数来存储SVG,例如:

contract MyContract {
// ...
string public svg; // could be a map or whatever depending on ur needs
function setSvg(string calldata svg_) external {
// Make sure only you can call this function...
svg = _svg;
}
}

然后你可以使用svg变量来渲染tokenURI

最新更新