Storage.Get获取不到数据的问题

夜,流离 2018-11-26 494

问题:

context.ScriptHash获取到的脚本是当前get方法的脚本,不是put时的脚本,因此查询不到Hello对应的key值,这个应该怎么解决?


放入存储区合约:

public class Contract1 : SmartContract

    {

        public static void Main()

        {

            Storage.Put(Storage.CurrentContext, "Hello", "World");

        }

    }

获取数据合约:

public class Contract1 : SmartContract

    {

        public static byte[] Main()

        {            

            return Storage.Get(Storage.CurrentContext, "Hello");

        }

    }

在合约调用时:

protected bool Storage_Get(ExecutionEngine engine)

        {

            if (engine.CurrentContext.EvaluationStack.Pop() is InteropInterface _interface)

            {

                StorageContext context = _interface.GetInterface<StorageContext>();

                if (!CheckStorageContext(context)) return false;

                byte[] key = engine.CurrentContext.EvaluationStack.Pop().GetByteArray();

                StorageItem item = Snapshot.Storages.TryGet(new StorageKey

                {

                    ScriptHash = context.ScriptHash,

                    Key = key

                });

                engine.CurrentContext.EvaluationStack.Push(item?.Value ?? new byte[0]);

                return true;

            }

            return false;

        }

最后于 10月前 被夜,流离编辑 ,原因:
最新回复 (5)
全部楼主
  • 咦~這裏有只豬 2018-11-27
    0 2
    你是想B合约获取A合约存储的值?
  • 夜,流离 2018-11-27
    0 3
    咦~這裏有只豬 你是想B合约获取A合约存储的值?
    是的
  • 夜,流离 2018-11-27
    0 4
    咦~這裏有只豬 你是想B合约获取A合约存储的值?
    请问:
    1.把get和put写在同一个合约里用参数控制调用可以正确执行,那是不是表示storage的get和put必须写在同一个合约里?
    2.把 get 和 put 放在if(Runtime.Trigger == TriggerType.Application)判断内部便不会被执行,请问这个不是这种类型的吗?
  • 咦~這裏有只豬 2018-11-27
    0 5
    写在一个合约里,存储区是相对合约独立的。不然不是我可以改任何合约里面的数据,不全乱套的。
    能执行的,可以先看看官网示例合约,或者去nel的github上看nns相关的合约。
  • 夜,流离 2018-11-27
    0 6
    咦~這裏有只豬 写在一个合约里,存储区是相对合约独立的。不然不是我可以改任何合约里面的数据,不全乱套的。 能执行的,可以先看看官网示例合约,或者去nel的github上看nns相关的合约。
    好的,谢谢
返回