2022.2.13更新回答:首先当我们用cli调用near view-state xxx.testnet --finality final 时,会得到类似如下的结果:[ { key: 'AAsAAAB4c2IudGVzdG5ldA==', value: 'AAEAAAAMAAAAd3JhcC50ZXN0bmV0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' }, { key: 'AmkBAAAAAAAAAA==', value: 'AAAAAAAAAAA=' }, { key: 'AmsAAAAAAAAAAA==', value: 'AQAAAAAAAAA=' }, { key: 'AnYAAAAAAAAAAA==', value: 'AAAAAAAAAAAAAAAAAAEAAAAAAAAACwAAAHhzYi50ZXN0bmV0AQAAAAIAAAAAAAAADAAAAHdyYXAudGVzdG5ldAAAAKHtzM4bwtMAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAHZFhfF+AQAAdkWF8X4BAAAAAAAAAAAAAAAAAAAA' }, { key: 'U1RBVEU=', value: 'AQAAAAACAAAAAmkBAAAAAAAAAAIAAAACawEAAAAAAAAAAgAAAAJ2AQAAAAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAACAAAAB3aGl0ZWxpc3RfYWRtaW4uc3VwZXJpc2UudGVzdG5ldBoAAABwcml6ZXBvb2wuc3VwZXJpc2UudGVzdG5ldA==' } ]这查询结果就是我们的合约状态的key/value形式。在这个pr里,一龙提供了一个cleanup合约,将这个合约编译出来的state_cleanup.wasm发布到我们自己的合约账号后执行里面的clean函数,可以根据传入的key清理状态,如以下是删除key为U1RBVEU=这个状态的流程:near deploy l.testmewell.testnet --wasmFile=res/state_cleanup.wasm near call l.testmewell.testnet clean '{"keys": ["U1RBVEU="]}' --accountId testmewell.testnet但是显然我们需要将near view-state xxx.testnet --finality final的查询结果传到这个清楚状态的函数的参数里,所以我自己写了个py脚本:import os import re import sys # cmd like: python state-clean.py your_contract_name.testnet your_account.testnet contract_name = sys.argv[1] account_name = sys.argv[2] states = os.popen('near view-state prizepool.superise.testnet --finality final').read() print("states:", states) pattern = re.compile("key: '([^']+)'", ) state_keys = pattern.findall(states) # ['AAsAAAB4c2IudGVzdG5ldA==', ... ,'U1RBVEU='] state_keys_arg = "[" + ",".join(list(map(lambda e: "\"%s\"" % e, state_keys))) + "]" # "[\"AAsAAAB4c2IudGVzdG5ldA==\",\"AmkBAAAAAAAAAA==\",\"AmsAAAAAAAAAAA==\",\"AnYAAAAAAAAAAA==\",\"U1RBVEU=\"]" print("states_key_arg:", state_keys_arg) cmd = "near call %s clean \'{\"keys\": %s}\' --accountId %s" % (contract_name, state_keys_arg, account_name) print("execute: "+cmd) result = os.popen(cmd) print(result.read()) 执行完脚本后再用near view-state xxx.testnet --finality final查询合约的状态,应该得到结果: [],那状态就清理完毕了最后重新部署自己业务的合约就ok了。第一次回答https://github.com/near/nearc... 这里有相关的讨论,最后我的解决办法就是自己添加一个清楚状态的函数并触发,然后再删除。
2022.2.13更新回答:
首先当我们用cli调用
near view-state xxx.testnet --finality final
时,会得到类似如下的结果:这查询结果就是我们的合约状态的key/value形式。
在这个pr里,一龙提供了一个cleanup合约,将这个合约编译出来的state_cleanup.wasm发布到我们自己的合约账号后执行里面的clean函数,可以根据传入的key清理状态,如以下是删除key为U1RBVEU=这个状态的流程:
但是显然我们需要将
near view-state xxx.testnet --finality final
的查询结果传到这个清楚状态的函数的参数里,所以我自己写了个py脚本:执行完脚本后再用
near view-state xxx.testnet --finality final
查询合约的状态,应该得到结果:[]
,那状态就清理完毕了最后重新部署自己业务的合约就ok了。
第一次回答
https://github.com/near/nearc... 这里有相关的讨论,最后我的解决办法就是自己添加一个清楚状态的函数并触发,然后再删除。