UNPKG

wowok

Version:

Wowok Blockchain TypeScript API

1 lines 14.5 kB
import{Experimental_CoreClient}from'../experimental/index.js';import{Owner_OwnerKind}from'./proto/sui/rpc/v2/owner.js';import{chunk,fromBase64,toBase64}from'../_deps/utils/index.js';import{UnchangedConsensusObject_UnchangedConsensusObjectKind}from'./proto/sui/rpc/v2/effects.js';import{ChangedObject_IdOperation,ChangedObject_InputObjectState,ChangedObject_OutputObjectState}from'./proto/sui/rpc/v2/effects.js';import{TransactionDataBuilder}from'../transactions/index.js';import{bcs}from'../bcs/index.js';import{Ability,FunctionDescriptor_Visibility,OpenSignature_Reference,OpenSignatureBody_Type}from'./proto/sui/rpc/v2/move_package.js';export class GrpcCoreClient extends Experimental_CoreClient{#client;constructor({client:a,...b}){super(b),this.#client=a;}async['getObjects'](a){const b=chunk(a['objectIds'],0x32),c=[];for(const d of b){const e=await this.#client['ledgerService']['batchGetObjects']({'requests':d['map'](f=>({'objectId':f})),'readMask':{'paths':['owner','object_type','bcs','digest','version','object_id','previous_transaction']}});c['push'](...e['response']['objects']['map'](f=>{if(f['result']['oneofKind']==='error')return new Error(f['result']['error']['message']);if(f['result']['oneofKind']!=='object')return new Error('Unexpected\x20result\x20type');const g=f['result']['object'];return{'id':g['objectId'],'version':g['version']?.['toString'](),'digest':g['digest'],'content':Promise['resolve'](g['bcs']?.['value']),'owner':mapOwner(g['owner']),'type':g['objectType'],'previousTransaction':g['previousTransaction']??null};}));}return{'objects':c};}async['getOwnedObjects'](a){const b=await this.#client['stateService']['listOwnedObjects']({'owner':a['address'],'objectType':a['type'],'pageToken':a['cursor']?fromBase64(a['cursor']):undefined,'readMask':{'paths':['owner','object_type','bcs','digest','version','object_id','previous_transaction']}}),c=b['response']['objects']['map'](d=>({'id':d['objectId'],'version':d['version']?.['toString'](),'digest':d['digest'],get 'content'(){return d['bcs']?.['value']?Promise['resolve'](d['bcs']['value']):Promise['reject'](new Error('GRPC\x20does\x20not\x20return\x20object\x20contents\x20when\x20listing\x20owned\x20objects'));},'owner':mapOwner(d['owner']),'type':d['objectType'],'previousTransaction':d['previousTransaction']??null}));return{'objects':c,'cursor':b['response']['nextPageToken']?toBase64(b['response']['nextPageToken']):null,'hasNextPage':b['response']['nextPageToken']!==undefined};}async['getCoins'](a){const b=await this.#client['stateService']['listOwnedObjects']({'owner':a['address'],'objectType':'0x2::coin::Coin<'+a['coinType']+'>','pageToken':a['cursor']?fromBase64(a['cursor']):undefined,'readMask':{'paths':['owner','object_type','bcs','digest','version','object_id','balance','previous_transaction']}});return{'objects':b['response']['objects']['map'](c=>({'id':c['objectId'],'version':c['version']?.['toString'](),'digest':c['digest'],get 'content'(){return c['bcs']?.['value']?Promise['resolve'](c['bcs']['value']):Promise['reject'](new Error('GRPC\x20does\x20not\x20return\x20object\x20contents\x20when\x20listing\x20owned\x20objects'));},'owner':mapOwner(c['owner']),'type':c['objectType'],'balance':c['balance']?.['toString'](),'previousTransaction':c['previousTransaction']??null})),'cursor':b['response']['nextPageToken']?toBase64(b['response']['nextPageToken']):null,'hasNextPage':b['response']['nextPageToken']!==undefined};}async['getBalance'](a){const b=await this.#client['stateService']['getBalance']({'owner':a['address'],'coinType':a['coinType']});return{'balance':{'balance':b['response']['balance']?.['balance']?.['toString']()??'0','coinType':b['response']['balance']?.['coinType']??a['coinType']}};}async['getAllBalances'](a){const b=await this.#client['stateService']['listBalances']({'owner':a['address'],'pageToken':a['cursor']?fromBase64(a['cursor']):undefined,'pageSize':a['limit']});return{'hasNextPage':!!b['response']['nextPageToken'],'cursor':b['response']['nextPageToken']?toBase64(b['response']['nextPageToken']):null,'balances':b['response']['balances']['map'](c=>({'balance':c['balance']?.['toString']()??'0','coinType':c['coinType']}))};}async['getTransaction'](a){const {response:b}=await this.#client['ledgerService']['getTransaction']({'digest':a['digest'],'readMask':{'paths':['digest','transaction','effects','signatures','balance_changes']}});return{'transaction':parseTransaction(b['transaction'])};}async['executeTransaction'](a){const {response:b}=await this.#client['transactionExecutionService']['executeTransaction']({'transaction':{'bcs':{'value':a['transaction']}},'signatures':a['signatures']['map'](c=>({'bcs':{'value':fromBase64(c)},'signature':{'oneofKind':undefined}})),'readMask':{'paths':['transaction.digest','transaction.transaction','transaction.effects','transaction.signatures','transaction.balance_changes']}});return{'transaction':parseTransaction(b['transaction'])};}async['dryRunTransaction'](a){const {response:b}=await this.#client['transactionExecutionService']['simulateTransaction']({'transaction':{'bcs':{'value':a['transaction']}},'readMask':{'paths':['transaction.digest','transaction.transaction','transaction.effects','transaction.signatures','transaction.balance_changes']}});return{'transaction':parseTransaction(b['transaction'])};}async['getReferenceGasPrice'](){const a=await this.#client['ledgerService']['getEpoch']({});return{'referenceGasPrice':a['response']['epoch']?.['referenceGasPrice']?.['toString']()};}async['getDynamicFields'](a){const b=await this.#client['stateService']['listDynamicFields']({'parent':a['parentId'],'pageToken':a['cursor']?fromBase64(a['cursor']):undefined});return{'dynamicFields':b['response']['dynamicFields']['map'](c=>({'id':c['fieldId'],'name':{'type':c['name']?.['name'],'bcs':c['name']?.['value']},'type':c['fieldObject']?'0x2::dynamic_field::Field<0x2::dynamic_object_field::Wrapper<'+c['name']?.['name']+'>,0x2::object::ID>':'0x2::dynamic_field::Field<'+c['name']?.['value']+','+c['valueType']+'>'})),'cursor':b['response']['nextPageToken']?toBase64(b['response']['nextPageToken']):null,'hasNextPage':b['response']['nextPageToken']!==undefined};}async['getMoveFunction'](a){const {response:b}=await this.#client['movePackageService']['getFunction']({'packageId':a['packageId'],'moduleName':a['moduleName'],'name':a['name']});let c='unknown';switch(b['function']?.['visibility']){case FunctionDescriptor_Visibility['PUBLIC']:c='public';break;case FunctionDescriptor_Visibility['PRIVATE']:c='private';break;case FunctionDescriptor_Visibility['FRIEND']:c='friend';break;}return{'function':{'packageId':a['packageId'],'moduleName':a['moduleName'],'name':b['function']?.['name'],'visibility':c,'isEntry':b['function']?.['isEntry']??![],'typeParameters':b['function']?.['typeParameters']?.['map'](({constraints:d})=>({'isPhantom':![],'constraints':d['map'](e=>{switch(e){case Ability['COPY']:return'copy';case Ability['DROP']:return'drop';case Ability['STORE']:return'store';case Ability['KEY']:return'key';default:return'unknown';}})??[]}))??[],'parameters':b['function']?.['parameters']?.['map'](d=>parseNormalizedWowMoveType(d))??[],'returns':b['function']?.['returns']?.['map'](d=>parseNormalizedWowMoveType(d))??[]}};}['resolveTransactionPlugin'](){return async function a(b,c,d){throw new Error('Transaction\x20resolution\x20is\x20not\x20supported\x20with\x20the\x20GRPC\x20client');};}}function mapOwner(a){if(!a)return null;if(a['kind']===Owner_OwnerKind['IMMUTABLE'])return{'$kind':'Immutable','Immutable':!![]};if(a['kind']===Owner_OwnerKind['ADDRESS'])return{'AddressOwner':a['address'],'$kind':'AddressOwner'};if(a['kind']===Owner_OwnerKind['OBJECT'])return{'$kind':'ObjectOwner','ObjectOwner':a['address']};if(a['kind']===Owner_OwnerKind['SHARED']){if(a['address'])return{'$kind':'ConsensusAddressOwner','ConsensusAddressOwner':{'owner':a['address'],'startVersion':a['version']?.['toString']()}};return{'$kind':'Shared','Shared':{'initialSharedVersion':a['version']?.['toString']()}};}throw new Error('Unknown\x20owner\x20kind');}function mapIdOperation(a){if(a==null)return null;switch(a){case ChangedObject_IdOperation['CREATED']:return'Created';case ChangedObject_IdOperation['DELETED']:return'Deleted';case ChangedObject_IdOperation['NONE']:case ChangedObject_IdOperation['ID_OPERATION_UNKNOWN']:return'None';default:a;return'Unknown';}}function mapInputObjectState(a){if(a==null)return null;switch(a){case ChangedObject_InputObjectState['EXISTS']:return'Exists';case ChangedObject_InputObjectState['DOES_NOT_EXIST']:return'DoesNotExist';case ChangedObject_InputObjectState['UNKNOWN']:return'Unknown';default:a;return'Unknown';}}function mapOutputObjectState(a){if(a==null)return null;switch(a){case ChangedObject_OutputObjectState['OBJECT_WRITE']:return'ObjectWrite';case ChangedObject_OutputObjectState['PACKAGE_WRITE']:return'PackageWrite';case ChangedObject_OutputObjectState['DOES_NOT_EXIST']:return'DoesNotExist';case ChangedObject_OutputObjectState['UNKNOWN']:return'Unknown';default:a;return'Unknown';}}function mapUnchangedConsensusObjectKind(a){if(a==null)return null;switch(a){case UnchangedConsensusObject_UnchangedConsensusObjectKind['UNCHANGED_CONSENSUS_OBJECT_KIND_UNKNOWN']:return'Unknown';case UnchangedConsensusObject_UnchangedConsensusObjectKind['READ_ONLY_ROOT']:return'ReadOnlyRoot';case UnchangedConsensusObject_UnchangedConsensusObjectKind['MUTATE_CONSENSUS_STREAM_ENDED']:return'MutateConsensusStreamEnded';case UnchangedConsensusObject_UnchangedConsensusObjectKind['READ_CONSENSUS_STREAM_ENDED']:return'ReadConsensusStreamEnded';case UnchangedConsensusObject_UnchangedConsensusObjectKind['CANCELED']:return'Cancelled';case UnchangedConsensusObject_UnchangedConsensusObjectKind['PER_EPOCH_CONFIG']:return'PerEpochConfig';default:a;return'Unknown';}}export function parseTransactionEffects({effects:a}){if(!a)return null;const b=a['changedObjects']['map'](c=>{return{'id':c['objectId'],'inputState':mapInputObjectState(c['inputState']),'inputVersion':c['inputVersion']?.['toString']()??null,'inputDigest':c['inputDigest']??null,'inputOwner':mapOwner(c['inputOwner']),'outputState':mapOutputObjectState(c['outputState']),'outputVersion':c['outputVersion']?.['toString']()??null,'outputDigest':c['outputDigest']??null,'outputOwner':mapOwner(c['outputOwner']),'idOperation':mapIdOperation(c['idOperation'])};});return{'bcs':a['bcs']?.['value'],'digest':a['digest'],'version':0x2,'status':a['status']?.['success']?{'success':!![],'error':null}:{'success':![],'error':JSON['stringify'](a['status']?.['error'])},'gasUsed':{'computationCost':a['gasUsed']?.['computationCost']?.['toString'](),'storageCost':a['gasUsed']?.['storageCost']?.['toString'](),'storageRebate':a['gasUsed']?.['storageRebate']?.['toString'](),'nonRefundableStorageFee':a['gasUsed']?.['nonRefundableStorageFee']?.['toString']()},'transactionDigest':a['transactionDigest'],'gasObject':{'id':a['gasObject']?.['objectId'],'inputState':mapInputObjectState(a['gasObject']?.['inputState']),'inputVersion':a['gasObject']?.['inputVersion']?.['toString']()??null,'inputDigest':a['gasObject']?.['inputDigest']??null,'inputOwner':mapOwner(a['gasObject']?.['inputOwner']),'outputState':mapOutputObjectState(a['gasObject']?.['outputState']),'outputVersion':a['gasObject']?.['outputVersion']?.['toString']()??null,'outputDigest':a['gasObject']?.['outputDigest']??null,'outputOwner':mapOwner(a['gasObject']?.['outputOwner']),'idOperation':mapIdOperation(a['gasObject']?.['idOperation'])},'eventsDigest':a['eventsDigest']??null,'dependencies':a['dependencies'],'lamportVersion':a['lamportVersion']?.['toString']()??null,'changedObjects':b,'unchangedConsensusObjects':a['unchangedConsensusObjects']['map'](c=>{return{'kind':mapUnchangedConsensusObjectKind(c['kind']),'objectId':c['objectId'],'version':c['version']?.['toString']()??null,'digest':c['digest']??null};}),'auxiliaryDataDigest':a['auxiliaryDataDigest']??null};}function parseTransaction(a){const b=bcs['SenderSignedData']['parse'](a['transaction']?.['bcs']?.['value'])[0x0],c=bcs['TransactionData']['serialize'](b['intentMessage']['value'])['toBytes'](),d=TransactionDataBuilder['restore']({'version':0x2,'sender':b['intentMessage']['value']['V1']['sender'],'expiration':b['intentMessage']['value']['V1']['expiration'],'gasData':b['intentMessage']['value']['V1']['gasData'],'inputs':b['intentMessage']['value']['V1']['kind']['ProgrammableTransaction']['inputs'],'commands':b['intentMessage']['value']['V1']['kind']['ProgrammableTransaction']['commands']}),e={};a['objects']?.['objects']['forEach'](g=>{g['objectId']&&g['objectType']&&(e[g['objectId']]=g['objectType']);});const f=parseTransactionEffects({'effects':a['effects']});return{'digest':a['digest'],'epoch':a['effects']?.['epoch']?.['toString']()??null,'effects':f,'objectTypes':Promise['resolve'](e),'transaction':{'gasData':d['gasData'],'sender':d['sender'],'expiration':d['expiration'],'commands':d['commands'],'inputs':d['inputs'],'version':d['version'],'bcs':c},'signatures':b['txSignatures'],'balanceChanges':a['balanceChanges']?.['map'](g=>({'coinType':g['coinType'],'address':g['address'],'amount':g['amount']}))??[]};}function parseNormalizedWowMoveType(a){let b=null;if(a['reference']===OpenSignature_Reference['IMMUTABLE'])b='immutable';else a['reference']===OpenSignature_Reference['MUTABLE']&&(b='mutable');return{'reference':b,'body':parseNormalizedWowMoveTypeBody(a['body'])};}function parseNormalizedWowMoveTypeBody(a){switch(a['type']){case OpenSignatureBody_Type['TYPE_UNKNOWN']:return{'$kind':'unknown'};case OpenSignatureBody_Type['ADDRESS']:return{'$kind':'address'};case OpenSignatureBody_Type['BOOL']:return{'$kind':'bool'};case OpenSignatureBody_Type['U8']:return{'$kind':'u8'};case OpenSignatureBody_Type['U16']:return{'$kind':'u16'};case OpenSignatureBody_Type['U32']:return{'$kind':'u32'};case OpenSignatureBody_Type['U64']:return{'$kind':'u64'};case OpenSignatureBody_Type['U128']:return{'$kind':'u128'};case OpenSignatureBody_Type['U256']:return{'$kind':'u256'};case OpenSignatureBody_Type['VECTOR']:return{'$kind':'vector','vector':parseNormalizedWowMoveTypeBody(a['typeParameterInstantiation'][0x0])};case OpenSignatureBody_Type['DATATYPE']:return{'$kind':'datatype','datatype':{'typeName':a['typeName'],'typeParameters':a['typeParameterInstantiation']['map'](b=>parseNormalizedWowMoveTypeBody(b))}};case OpenSignatureBody_Type['TYPE_PARAMETER']:return{'$kind':'typeParameter','index':a['typeParameter']};default:return{'$kind':'unknown'};}}