wowok
Version:
Wowok Blockchain TypeScript API
1 lines • 9.32 kB
JavaScript
import{isValidWowAddress}from'../../utils/wow-types.js';import{toTxObject,isValidDescription,MAX_DESCRIPTION_LENGTH,PackageAddress,isValidU8,isValidU64,GetObjectExisted,GetObject,IsValidArgType}from'../common.js';import{W_ERROR,WErrors}from'../exception.js';import{GetAccountOrMark_Address,GetManyAccountOrMark_Address}from'../local/index.js';import{LocalMark}from'../local/local.js';import{ObjectType}from'../query/object.js';import{query_received}from'../query/received.js';import{parseObjectType,validObjects}from'../util.js';import{CallBase,getCoinParam}from'./base.js';import{get_guardSubmissions}from'./passport.js';import{paymentInfo}from'./payment.js';export class CallAllocation extends CallBase{['data'];['object_address']=undefined;['type_parameter']=undefined;constructor(a){super(),this['data']=a;}async['prepare'](a){await super['prepare'](a);!this['object_address']&&(this['object_address']=await GetObjectExisted(this['data']?.['object']));if(this['object_address'])this['content']=undefined,await this['update_content'](a,ObjectType['Allocation'],this['object_address']),!this['content']&&W_ERROR(WErrors['InvalidParam'],'CallAllocation_Data.data.object:'+this['object_address']),this['type_parameter']=parseObjectType(this['content']['type_raw'],'allocation::Allocation'),!this['type_parameter']&&W_ERROR(WErrors['IsValidArgType'],'CallAllocation_Data.data.object.type_parameter\x20is\x20empty');else{const b=GetObject(this['data']['object']);(!b||!IsValidArgType(b?.['type_parameter']))&&W_ERROR(WErrors['IsValidArgType'],'CallAllocation_Data.data.object.type_parameter\x20is\x20empty'),this['type_parameter']=b?.['type_parameter'];}}async['call'](a){await this['prepare'](a);if('alloc_by_guard'in this['data']&&this['data']['alloc_by_guard']!=null){const b=await LocalMark['Instance']()['get_address'](this['data']['alloc_by_guard']);(!b||!isValidWowAddress(b))&&W_ERROR(WErrors['IsValidAddress'],'alloc_by_guard:\x20'+this['data']['alloc_by_guard']);this['content']&&!this['content']['allocators']['find'](d=>d['guard']===b)&&W_ERROR(WErrors['InvalidParam'],'alloc_by_guard:\x20'+this['data']['alloc_by_guard']+'\x20not\x20found\x20in\x20allocators\x20'+this['content']['allocators']['map'](d=>d['guard']));this['data']['alloc_by_guard']=b;const c=await get_guardSubmissions(a,[this['data']['alloc_by_guard']]);if(c['submission']['length']>0x0)return{'type':'submission','guard':c['guard'],'submission':c['submission']};return await this['check_passport'](a,c);}return await this['exec'](a);}async['operate'](a,b,c){if(this['object_address']){if('received_coins'in this['data']&&this['data']['received_coins']!=null){if(this['data']['received_coins']==='recently'){const d=await query_received({'name_or_address':{'name_or_address':this['object_address'],'local_mark_first':!![]},'network':a['network'],'no_cache':a['no_cache']});Array['isArray'](d)?W_ERROR(WErrors['InvalidParam'],'CallAllocation_Data.data.received_coins:\x20received\x20is\x20ReceivedNormal[]'):this['data']['received_coins']=d;}if(typeof this['data']['received_coins']==='object'&&'received'in this['data']['received_coins']&&this['data']['received_coins']['received']?.['length']>0x0){this['data']['received_coins']?.['token_type']!==this['type_parameter']&&W_ERROR(WErrors['InvalidParam'],'CallAllocation_Data.data.received_coins.token_type:'+this['data']['received_coins']?.['token_type']);for(const e of this['data']['received_coins']['received']){(!isValidWowAddress(e['id'])||!isValidWowAddress(e['payment']))&&W_ERROR(WErrors['InvalidParam'],'CallAllocation_Data.data.received_coins:'+e['id']),receive(b,toTxObject(b,this['object_address']),this['type_parameter'],toTxObject(b,e['id']),toTxObject(b,e['payment']));}}}'alloc_by_guard'in this['data']&&this['data']['alloc_by_guard']!=null&&(!c&&W_ERROR(WErrors['InvalidParam'],'CallAllocation_Data.data.alloc_by_guard:'+this['data']['alloc_by_guard']),alloc(b,toTxObject(b,this['object_address']),this['type_parameter'],this['data']['alloc_by_guard'],c));}else{const f=GetObject(this['data']['object']);!IsValidArgType(f?.['type_parameter'])&&W_ERROR(WErrors['IsValidArgType'],'CallAllocation_Data.data.object.type_parameter\x20'+f?.['type_parameter']);this['type_parameter']=f?.['type_parameter'];let g;'coin'in this['data']&&this['data']['coin']&&(g=await getCoinParam(a,b,this['data']['coin'],this['type_parameter']));if(g&&'allocators'in this['data']&&this['data']['allocators']&&this['type_parameter']){const h=newAllocation(b,this['type_parameter'],g,await allocators(b,this['data']['allocators']));await this['new_with_mark'](a,b,ObjectType['Allocation'],create(b,h,this['type_parameter'],await paymentInfo(a,b,this['data']['payment_info'])),f);}else W_ERROR(WErrors['InvalidParam'],'CallAllocation_Data.data\x20'+JSON['stringify'](this['data']));}}}export function allocationFn(a){return PackageAddress+'::allocation::'+a;}export const MAX_ALLOCATOR_COUNT=0x64;export const MAX_SHARING_COUNT=0x64;const getAllocationModeNumber=a=>{let b;if(typeof a==='number')b=a;else{if(typeof a==='string')switch(a){case'Amount':b=0x0;break;case'Rate':b=0x1;break;case'Surplus':b=0x2;break;default:b=Number(a);}else b=Number(a);}return b!==0x0&&b!==0x1&&b!==0x2&&W_ERROR(WErrors['InvalidParam'],'Invalid\x20allocation\x20mode:\x20'+a+'.\x20Only\x200\x20(Amount),\x201\x20(Rate),\x20or\x202\x20(Surplus)\x20are\x20allowed.'),b;};export const sharing=async(a,b,c)=>{const d=getAllocationModeNumber(b['mode']);if('GuardIdentifier'in b['who'])return!isValidU8(b['who']['GuardIdentifier'])&&W_ERROR(WErrors['IsValidU8'],'sharing\x20GuardIdentifier:\x20'+b['who']['GuardIdentifier']),a['moveCall']({'target':allocationFn('sharing_for_guard_identifier'),'arguments':[a['pure']['u8'](b['who']['GuardIdentifier']),a['pure']['u64'](b['sharing']),a['pure']['u8'](d)]});else{if('Entity'in b['who']){const e=c||await GetAccountOrMark_Address(b['who']['Entity']);return!e&&W_ERROR(WErrors['IsValidAddress'],'sharing\x20Entity:\x20'+b['who']['Entity']),a['moveCall']({'target':allocationFn('sharing_for_address'),'arguments':[a['pure']['address'](e),a['pure']['u64'](b['sharing']),a['pure']['u8'](d)]});}else return a['moveCall']({'target':allocationFn('sharing_for_signer'),'arguments':[a['pure']['u64'](b['sharing']),a['pure']['u8'](d)]});}};export const allocators=async(a,b)=>{!isValidDescription(b['description'])&&W_ERROR(WErrors['InvalidParam'],'Description\x20exceeds\x20maximum\x20length\x20'+MAX_DESCRIPTION_LENGTH);b['allocators']['length']>MAX_ALLOCATOR_COUNT&&W_ERROR(WErrors['InvalidParam'],'Allocator\x20count\x20exceeds\x20maximum\x20limit\x20'+MAX_ALLOCATOR_COUNT);b['allocators']['length']===0x0&&W_ERROR(WErrors['InvalidParam'],'Allocator\x20array\x20cannot\x20be\x20empty');!isValidU64(b['threshold'])&&W_ERROR(WErrors['InvalidParam'],'threshold:\x20'+b['threshold']);const c=a['moveCall']({'target':allocationFn('allocators'),'arguments':[a['pure']['string'](b['description']),a['pure']['u64'](b['threshold'])]});for(let d=0x0;d<b['allocators']['length'];d++){const e=b['allocators'][d];e['sharing']['length']===0x0&&W_ERROR(WErrors['InvalidParam'],'sharing\x20array\x20cannot\x20be\x20empty');e['sharing']['length']>MAX_SHARING_COUNT&&W_ERROR(WErrors['InvalidParam'],'sharing\x20count\x20exceeds\x20maximum\x20limit\x20'+MAX_SHARING_COUNT);const f=e['sharing']['map']((n,o)=>{return'Entity'in n['who']?{'index':o,'name_or_address':n['who']['Entity']['name_or_address']}:null;})['filter'](n=>n!==null),[h,j]=await Promise['all']([LocalMark['Instance']()['get_address'](e['guard']),GetManyAccountOrMark_Address({'entities':f,'check_all_founded':!![]})]),k=new Array(e['sharing']['length']);f['forEach']((n,o)=>{k[n['index']]=j[o];});!h&&W_ERROR(WErrors['IsValidAddress'],'guard:\x20'+e['guard']);const l=await Promise['all'](e['sharing']['map'](async(n,o)=>{if('Entity'in n['who']){const p=k[o];return!p&&W_ERROR(WErrors['IsValidAddress'],'entity:\x20'+(typeof n['who']['Entity']==='string'?n['who']['Entity']:n['who']['Entity']['name_or_address'])),sharing(a,n,p);}else return sharing(a,n);})),m=a['makeMoveVec']({'elements':l,'type':PackageAddress+'::allocation::Sharing'});a['moveCall']({'target':allocationFn('allocator_add'),'arguments':[c,toTxObject(a,h),m,a['pure']['option']('u64',e?.['max'])]});}return c;};export function alloc(a,b,c,d,e){validObjects([b,d,e]),!IsValidArgType(c)&&W_ERROR(WErrors['InvalidParam'],'allocation_type:\x20'+c+'\x20invalid'),a['moveCall']({'target':allocationFn('alloc'),'arguments':[b,toTxObject(a,d),toTxObject(a,e),a['object']['mutRegistrar'](),a['object']['clock']()],'typeArguments':[c]});}export function newAllocation(a,b,c,d){return validObjects([c,d]),a['moveCall']({'target':allocationFn('new_with_coin'),'arguments':[c,d,a['object']['mutRegistrar'](),a['object']['clock']()],'typeArguments':[b]});}export function create(a,b,c,d){return validObjects([b,d]),!IsValidArgType(c)&&W_ERROR(WErrors['InvalidParam'],'allocation_type:\x20'+c+'\x20invalid'),a['moveCall']({'target':allocationFn('create'),'arguments':[b,toTxObject(a,d)],'typeArguments':[c]});}export function receive(a,b,c,d,e){return validObjects([b,e,d]),!IsValidArgType(c)&&W_ERROR(WErrors['InvalidParam'],'allocation_type:\x20'+c+'\x20invalid'),a['moveCall']({'target':allocationFn('receive'),'arguments':[b,toTxObject(a,d),toTxObject(a,e)],'typeArguments':[c]});}