Exemplo n.º 1
0
 private static byte[] putRequest(BigInteger chainID, BigInteger requestID, CrossChainTxParameter para)
 {
     requestID = requestID + 1;
     byte[] requestKey = requestPreifx.Concat(chainID.ToByteArray()).Concat(requestID.ToByteArray());
     Storage.Put(requestKey, WriteCrossChainTxParameter(para));
     Storage.Put(requestIDPrefix.Concat(chainID.ToByteArray()), requestID);
     return(requestKey);
 }
Exemplo n.º 2
0
 private static byte[] WriteCrossChainTxParameter(CrossChainTxParameter para)
 {
     byte[] result = new byte[] { };
     result = WriteVarBytes(result, para.txHash);
     result = WriteVarBytes(result, para.crossChainID);
     result = WriteVarBytes(result, para.fromContract);
     byte[] toChainIDBytes = PadRight(para.toChainID.AsByteArray(), 8);
     result = result.Concat(toChainIDBytes);
     result = WriteVarBytes(result, para.toContract);
     result = WriteVarBytes(result, para.method);
     result = WriteVarBytes(result, para.args);
     return(result);
 }
Exemplo n.º 3
0
        private static CrossChainTxParameter deserializCrossChainTxParameter(byte[] Source, int offset)
        {
            CrossChainTxParameter txParameter = new CrossChainTxParameter();
            //get txHash
            var temp = ReadVarBytes(Source, offset);

            txParameter.txHash = (byte[])temp[0];
            offset             = (int)temp[1];

            //get crossChainId
            temp = ReadVarBytes(Source, offset);
            txParameter.crossChainID = (byte[])temp[0];
            offset = (int)temp[1];

            //get fromContract
            temp = ReadVarBytes(Source, offset);
            txParameter.fromContract = (byte[])temp[0];
            offset = (int)temp[1];

            //get toChainID
            txParameter.toChainID = Source.Range(offset, 8).ToBigInteger();
            offset = offset + 8;

            //get toContract
            temp = ReadVarBytes(Source, offset);
            txParameter.toContract = (byte[])temp[0];
            offset = (int)temp[1];

            //get method
            temp = ReadVarBytes(Source, offset);
            txParameter.method = (byte[])temp[0];
            offset             = (int)temp[1];

            //get params
            temp             = ReadVarBytes(Source, offset);
            txParameter.args = (byte[])temp[0];
            offset           = (int)temp[1];

            return(txParameter);
        }
Exemplo n.º 4
0
        public static bool CrossChain(BigInteger toChainID, byte[] toChainAddress, byte[] functionName, byte[] args, byte[] caller)
        {
            var tx = (Transaction)ExecutionEngine.ScriptContainer;

            CrossChainTxParameter para = new CrossChainTxParameter
            {
                toChainID  = toChainID,
                toContract = toChainAddress,
                method     = functionName,
                args       = args,

                txHash       = tx.Hash,
                crossChainID = SmartContract.Sha256(ExecutionEngine.ExecutingScriptHash.Concat(tx.Hash)),
                fromContract = caller
            };
            var requestId   = getRequestID(toChainID);
            var resquestKey = putRequest(toChainID, requestId, para);

            //event
            CrossChainLockEvent(caller, para.fromContract, toChainID, resquestKey, para.args);
            return(true);
        }