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); }
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); }
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); }
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); }
public TransactionCapsule(WitnessUpdateContract contract) { CreateTransaction(contract, Transaction.Types.Contract.Types.ContractType.WitnessUpdateContract); }
public async Task <TransactionExtention> UpdateWitnessAsync(WitnessUpdateContract contract) { return(await _grpcClient.UpdateWitness2Async(contract)); }
public async Task <Transaction> UpdateWitnessAsync(WitnessUpdateContract contract, CancellationToken token = default) { var wallet = GetWallet(); return(await wallet.UpdateWitnessAsync(contract, _configuration.GetCallOptions(token))); }