forked from cerc-io/laconic-sdk
404 lines
8.0 KiB
TypeScript
404 lines
8.0 KiB
TypeScript
import {
|
|
generateTypes,
|
|
} from '@tharsis/eip712'
|
|
import {
|
|
Chain,
|
|
Sender,
|
|
Fee,
|
|
} from '@tharsis/transactions'
|
|
|
|
import * as registryTx from '../proto/vulcanize/registry/v1beta1/tx'
|
|
import * as registry from '../proto/vulcanize/registry/v1beta1/registry'
|
|
import { createTx } from './util'
|
|
import { Payload } from '../types'
|
|
|
|
const MSG_RESERVE_AUTHORITY_TYPES = {
|
|
MsgValue: [
|
|
{ name: 'name', type: 'string' },
|
|
{ name: 'signer', type: 'string' },
|
|
{ name: 'owner', type: 'string' },
|
|
],
|
|
}
|
|
|
|
const MSG_SET_NAME_TYPES = {
|
|
MsgValue: [
|
|
{ name: 'crn', type: 'string' },
|
|
{ name: 'cid', type: 'string' },
|
|
{ name: 'signer', type: 'string' },
|
|
],
|
|
}
|
|
|
|
const MSG_SET_RECORD_TYPES = {
|
|
MsgValue: [
|
|
{ name: 'bond_id', type: 'string' },
|
|
{ name: 'signer', type: 'string' },
|
|
{ name: 'payload', type: 'TypePayload' },
|
|
],
|
|
TypePayload: [
|
|
{ name: 'record', type: 'TypePayloadRecord' },
|
|
{ name: 'signatures', type: 'TypePayloadSignatures[]' },
|
|
],
|
|
TypePayloadRecord: [
|
|
{ name: 'id', type: 'string' },
|
|
{ name: 'bond_id', type: 'string' },
|
|
{ name: 'create_time', type: 'string' },
|
|
{ name: 'expiry_time', type: 'string' },
|
|
{ name: 'deleted', type: 'bool' },
|
|
{ name: 'attributes', type: 'TypePayloadRecordAttributes' },
|
|
],
|
|
TypePayloadRecordAttributes: [
|
|
{ name: 'type_url', type: 'string' },
|
|
{ name: 'value', type: 'uint8[]' },
|
|
],
|
|
TypePayloadSignatures: [
|
|
{ name: 'sig', type: 'string' },
|
|
{ name: 'pub_key', type: 'string' }
|
|
],
|
|
}
|
|
|
|
const MSG_SET_AUTHORITY_BOND_TYPES = {
|
|
MsgValue: [
|
|
{ name: 'name', type: 'string' },
|
|
{ name: 'bond_id', type: 'string' },
|
|
{ name: 'signer', type: 'string' },
|
|
],
|
|
}
|
|
|
|
const MSG_DELETE_NAME_TYPES = {
|
|
MsgValue: [
|
|
{ name: 'crn', type: 'string' },
|
|
{ name: 'signer', type: 'string' },
|
|
],
|
|
}
|
|
|
|
export const parseMsgSetRecordResponse = (data: string) => {
|
|
const responseBytes = Buffer.from(data, 'hex')
|
|
|
|
// TODO: Decode response using protobuf.
|
|
// const msgSetRecordResponse = nameserviceTx.vulcanize.nameservice.v1beta1.MsgSetRecordResponse.deserialize(responseBytes);
|
|
// return msgSetRecordResponse.toObject();
|
|
|
|
// Workaround as proto based decoding is not working.
|
|
const [_, id] = responseBytes.toString().split(';')
|
|
|
|
return { id }
|
|
}
|
|
|
|
export const NAMESERVICE_ERRORS = [
|
|
'Name already reserved.',
|
|
'Authority bond not found.',
|
|
'Name authority not found.',
|
|
'Access denied.',
|
|
]
|
|
|
|
export interface MessageMsgReserveAuthority {
|
|
name: string
|
|
owner: string
|
|
}
|
|
|
|
export interface MessageMsgSetName {
|
|
crn: string
|
|
cid: string
|
|
}
|
|
|
|
export interface MessageMsgSetRecord {
|
|
bondId: string
|
|
payload: Payload
|
|
}
|
|
|
|
export interface MessageMsgSetAuthorityBond {
|
|
name: string
|
|
bondId: string
|
|
}
|
|
|
|
export interface MessageMsgDeleteName {
|
|
crn: string
|
|
}
|
|
|
|
export function createTxMsgReserveAuthority(
|
|
chain: Chain,
|
|
sender: Sender,
|
|
fee: Fee,
|
|
memo: string,
|
|
params: MessageMsgReserveAuthority,
|
|
) {
|
|
const types = generateTypes(MSG_RESERVE_AUTHORITY_TYPES)
|
|
|
|
const msg = createMsgReserveAuthority(
|
|
params.name,
|
|
sender.accountAddress,
|
|
params.owner
|
|
)
|
|
|
|
const msgCosmos = protoCreateMsgReserveAuthority(
|
|
params.name,
|
|
sender.accountAddress,
|
|
params.owner
|
|
)
|
|
|
|
return createTx(chain, sender, fee, memo, types, msg, msgCosmos)
|
|
}
|
|
|
|
export function createTxMsgSetName(
|
|
chain: Chain,
|
|
sender: Sender,
|
|
fee: Fee,
|
|
memo: string,
|
|
params: MessageMsgSetName,
|
|
) {
|
|
const types = generateTypes(MSG_SET_NAME_TYPES)
|
|
|
|
const msg = createMsgSetName(
|
|
params.crn,
|
|
params.cid,
|
|
sender.accountAddress
|
|
)
|
|
|
|
const msgCosmos = protoCreateMsgSetName(
|
|
params.crn,
|
|
params.cid,
|
|
sender.accountAddress
|
|
)
|
|
|
|
return createTx(chain, sender, fee, memo, types, msg, msgCosmos)
|
|
}
|
|
|
|
export function createTxMsgSetRecord(
|
|
chain: Chain,
|
|
sender: Sender,
|
|
fee: Fee,
|
|
memo: string,
|
|
params: MessageMsgSetRecord,
|
|
) {
|
|
const types = generateTypes(MSG_SET_RECORD_TYPES)
|
|
|
|
const msg = createMsgSetRecord(
|
|
params.bondId,
|
|
params.payload,
|
|
sender.accountAddress
|
|
)
|
|
|
|
const msgCosmos = protoCreateMsgSetRecord(
|
|
params.bondId,
|
|
params.payload,
|
|
sender.accountAddress
|
|
)
|
|
|
|
return createTx(chain, sender, fee, memo, types, msg, msgCosmos)
|
|
}
|
|
|
|
export function createTxMsgSetAuthorityBond(
|
|
chain: Chain,
|
|
sender: Sender,
|
|
fee: Fee,
|
|
memo: string,
|
|
params: MessageMsgSetAuthorityBond,
|
|
) {
|
|
const types = generateTypes(MSG_SET_AUTHORITY_BOND_TYPES)
|
|
|
|
const msg = createMsgSetAuthorityBond(
|
|
params.name,
|
|
params.bondId,
|
|
sender.accountAddress
|
|
)
|
|
|
|
const msgCosmos = protoCreateMsgSetAuthorityBond(
|
|
params.name,
|
|
params.bondId,
|
|
sender.accountAddress
|
|
)
|
|
|
|
return createTx(chain, sender, fee, memo, types, msg, msgCosmos)
|
|
}
|
|
|
|
export function createTxMsgDeleteName(
|
|
chain: Chain,
|
|
sender: Sender,
|
|
fee: Fee,
|
|
memo: string,
|
|
params: MessageMsgDeleteName,
|
|
) {
|
|
const types = generateTypes(MSG_DELETE_NAME_TYPES)
|
|
|
|
const msg = createMsgDeleteName(
|
|
params.crn,
|
|
sender.accountAddress
|
|
)
|
|
|
|
const msgCosmos = protoCreateMsgDeleteName(
|
|
params.crn,
|
|
sender.accountAddress
|
|
)
|
|
|
|
return createTx(chain, sender, fee, memo, types, msg, msgCosmos)
|
|
}
|
|
|
|
function createMsgReserveAuthority(
|
|
name: string,
|
|
signer: string,
|
|
owner: string
|
|
) {
|
|
return {
|
|
type: 'registry/ReserveAuthority',
|
|
value: {
|
|
name,
|
|
signer,
|
|
owner
|
|
},
|
|
}
|
|
}
|
|
|
|
const protoCreateMsgReserveAuthority = (
|
|
name: string,
|
|
signer: string,
|
|
owner: string,
|
|
) => {
|
|
const reserveAuthorityMessage = new registryTx.vulcanize.registry.v1beta1.MsgReserveAuthority({
|
|
name,
|
|
signer,
|
|
owner
|
|
})
|
|
|
|
return {
|
|
message: reserveAuthorityMessage,
|
|
path: 'vulcanize.registry.v1beta1.MsgReserveAuthority',
|
|
}
|
|
}
|
|
|
|
function createMsgSetName(
|
|
crn: string,
|
|
cid: string,
|
|
signer: string
|
|
) {
|
|
return {
|
|
type: 'registry/SetName',
|
|
value: {
|
|
crn,
|
|
cid,
|
|
signer
|
|
},
|
|
}
|
|
}
|
|
|
|
const protoCreateMsgSetName = (
|
|
crn: string,
|
|
cid: string,
|
|
signer: string
|
|
) => {
|
|
const setNameMessage = new registryTx.vulcanize.registry.v1beta1.MsgSetName({
|
|
crn,
|
|
cid,
|
|
signer,
|
|
})
|
|
|
|
return {
|
|
message: setNameMessage,
|
|
path: 'vulcanize.registry.v1beta1.MsgSetName',
|
|
}
|
|
}
|
|
|
|
function createMsgSetRecord(
|
|
bondId: string,
|
|
payload: Payload,
|
|
signer: string
|
|
) {
|
|
return {
|
|
type: 'registry/SetRecord',
|
|
value: {
|
|
bond_id: bondId,
|
|
signer,
|
|
payload: payload.serialize()
|
|
},
|
|
}
|
|
}
|
|
|
|
const protoCreateMsgSetRecord = (
|
|
bondId: string,
|
|
payloadData: Payload,
|
|
signer: string
|
|
) => {
|
|
const record = new registry.vulcanize.registry.v1beta1.Record(payloadData.record.serialize())
|
|
|
|
const signatures = payloadData.signatures.map(
|
|
signature => new registry.vulcanize.registry.v1beta1.Signature(
|
|
signature.serialize()
|
|
)
|
|
)
|
|
|
|
const payload = new registryTx.vulcanize.registry.v1beta1.Payload({
|
|
record,
|
|
signatures
|
|
})
|
|
|
|
const setNameMessage = new registryTx.vulcanize.registry.v1beta1.MsgSetRecord({
|
|
bond_id: bondId,
|
|
signer,
|
|
payload
|
|
})
|
|
|
|
return {
|
|
message: setNameMessage,
|
|
path: 'vulcanize.registry.v1beta1.MsgSetRecord',
|
|
}
|
|
}
|
|
|
|
function createMsgSetAuthorityBond(
|
|
name: string,
|
|
bondId: string,
|
|
signer: string
|
|
) {
|
|
return {
|
|
type: 'registry/SetAuthorityBond',
|
|
value: {
|
|
name,
|
|
bond_id: bondId,
|
|
signer
|
|
},
|
|
}
|
|
}
|
|
|
|
const protoCreateMsgSetAuthorityBond = (
|
|
name: string,
|
|
bondId: string,
|
|
signer: string
|
|
) => {
|
|
const setAuthorityBondMessage = new registryTx.vulcanize.registry.v1beta1.MsgSetAuthorityBond({
|
|
name,
|
|
bond_id: bondId,
|
|
signer,
|
|
})
|
|
|
|
return {
|
|
message: setAuthorityBondMessage,
|
|
path: 'vulcanize.registry.v1beta1.MsgSetAuthorityBond',
|
|
}
|
|
}
|
|
|
|
function createMsgDeleteName(
|
|
crn: string,
|
|
signer: string
|
|
) {
|
|
return {
|
|
type: 'registry/DeleteAuthority',
|
|
value: {
|
|
crn,
|
|
signer
|
|
},
|
|
}
|
|
}
|
|
|
|
const protoCreateMsgDeleteName = (
|
|
crn: string,
|
|
signer: string
|
|
) => {
|
|
const deleteNameAutorityMessage = new registryTx.vulcanize.registry.v1beta1.MsgDeleteNameAuthority({
|
|
crn,
|
|
signer,
|
|
})
|
|
|
|
return {
|
|
message: deleteNameAutorityMessage,
|
|
path: 'vulcanize.registry.v1beta1.MsgDeleteNameAuthority',
|
|
}
|
|
}
|