这样的数据格式
这样的正常
能描述得清楚一些吗?
这是哪个组件的,做了哪些操作出错了,以及期望是什么。
通过java sdk调用交易接口,发现数据格式不对,就会报不同的错,有时候会报配额不足,有时候报上面的这个,不知道对数据格式有什么具体的要求
需求是希望将我们数据库中的比如用户数据上传到链上,查出来是一个对象,好像不能直接设置到data,转成16进制后也会报错
配额不足,是因为你的数据太大,所设置的交易 quota limit 太小导致的,只要把交易的quota limit 设大就可以了。
数据格式的问题,我记得你在下面的贴子问过,不知最后结果如何?
交易参数设置问题
我之前是直接用map转成string再转16进制,这种方式是可以显示的,
EVM 的调用栈用完了。可能是合约写得有点问题,能把你的合约发出来看一下吗?
我没有自己写合约,用的是sdk里面的测试接口,调用的应该是默认的合约吧
调的是哪个接口?然后你是怎么调用的?
再往下一点,下面调用的是哪个合约?
解析数据格式是链下的事情,跟数据是否上链没有关系,区块链保证的是数据上链时是什么样子,取到时还是什么样子,建议你检查一下解析数据的方法。
只要是经过 utf8 转 hex 的数据都可以上链,不过上链数据的大小应该会有上限,比如上传一部 1G 的电子书数据肯定是会失败的。
请问第一幅图中的 data 是如何得到的?单看代码你只是把结构化的数据放到了合约的构造方法中,而且这一步只是部署一个合约,那么我就不是很理解你是如何确定你拿到的 data 就是你想要的哪个值
你可能还没有弄明白 用户数据上链 这个动作,需要完成哪些工作。
我现在假设这里所谈的 用户数据 是结构化的数据,你可能需要:
function setData(id, car_license, ...) {
...
}
function getData(id, car_license, ...) {
...
}
部署智能合约到链上;
DApp 使用 SDK 调用你所部署的智能合约接口,将数据传给你的智能合约。例如:
setData(id, car_license, ...)
getData
接口获得数据,然后将数据展现。注意:
在整个过程中,数据格式的转化/解析是由你来定的,对于链来说,只是存了一段 二进制 的东西而矣。
在设计智能合约接口时,其参数大小是有限制的 (当前限制是 1024 * U256)。因此,如果你的数据很大,就会有栈溢出的可能,建议将数据的 hash 上链,而不是所有数据。
如果你对 DApp 还有困惑,建议你先仔细研究一下:
谢谢!