Example #1
0
        private void UpdateWitness(WitnessUpdateContract contract)
        {
            WitnessCapsule witness = this.db_manager.Witness.Get(contract.OwnerAddress.ToByteArray());

            witness.Url = contract.UpdateUrl.ToStringUtf8();
            this.db_manager.Witness.Put(witness.CreateDatabaseKey(), witness);
        }
Example #2
0
        public static RpcApiResult CreateUpdateWitnessContract(byte[] owner_address,
                                                               byte[] url,
                                                               out WitnessUpdateContract contract)
        {
            contract = new WitnessUpdateContract();
            contract.OwnerAddress = ByteString.CopyFrom(owner_address);
            contract.UpdateUrl    = ByteString.CopyFrom(url);

            return(RpcApiResult.Success);
        }
Example #3
0
        public override bool Validate()
        {
            if (this.contract == null)
            {
                throw new ContractValidateException("No contract!");
            }

            if (this.db_manager == null)
            {
                throw new ContractValidateException("No dbManager!");
            }

            if (this.contract.Is(WitnessUpdateContract.Descriptor))
            {
                WitnessUpdateContract witness_update_contract = null;
                try
                {
                    witness_update_contract = this.contract.Unpack <WitnessUpdateContract>();
                }
                catch (InvalidProtocolBufferException e)
                {
                    Logger.Debug(e.Message);
                    throw new ContractValidateException(e.Message);
                }

                byte[] owner_address = witness_update_contract.OwnerAddress.ToByteArray();
                if (!Wallet.IsValidAddress(owner_address))
                {
                    throw new ContractValidateException("Invalid address");
                }

                if (!this.db_manager.Account.Contains(owner_address))
                {
                    throw new ContractValidateException("account does not exist");
                }

                if (!TransactionUtil.ValidUrl(witness_update_contract.UpdateUrl.ToByteArray()))
                {
                    throw new ContractValidateException("Invalid url");
                }

                if (!this.db_manager.Witness.Contains(owner_address))
                {
                    throw new ContractValidateException("Witness does not exist");
                }
            }
            else
            {
                throw new ContractValidateException(
                          "contract type error,expected type [WitnessUpdateContract],real type[" + contract.GetType().Name + "]");
            }

            return(true);
        }
Example #4
0
        public override bool Execute(TransactionResultCapsule result)
        {
            long fee = CalcFee();

            try
            {
                WitnessUpdateContract witness_update_contract = this.contract.Unpack <WitnessUpdateContract>();
                UpdateWitness(witness_update_contract);
                result.SetStatus(fee, code.Sucess);
            }
            catch (InvalidProtocolBufferException e)
            {
                Logger.Debug(e.Message);
                result.SetStatus(fee, code.Failed);
                throw new ContractExeException(e.Message);
            }

            return(true);
        }
Example #5
0
 public TransactionCapsule(WitnessUpdateContract contract)
 {
     CreateTransaction(contract, Transaction.Types.Contract.Types.ContractType.WitnessUpdateContract);
 }
Example #6
0
 public async Task <TransactionExtention> UpdateWitnessAsync(WitnessUpdateContract contract)
 {
     return(await _grpcClient.UpdateWitness2Async(contract));
 }
Example #7
0
        public async Task <Transaction> UpdateWitnessAsync(WitnessUpdateContract contract, CancellationToken token = default)
        {
            var wallet = GetWallet();

            return(await wallet.UpdateWitnessAsync(contract, _configuration.GetCallOptions(token)));
        }