Comments (14)
Hi
Many breaking changes are due to breaking changes of cosmos-sdk.
How to announce transaction with cosmos-client v0.42 is written in README.
https://github.com/cosmos-client/cosmos-client-ts/blob/main/README.md
Please refer to it.
import { cosmosclient, rest, proto } from 'cosmos-client';
describe('bank', () => {
it('send', async () => {
expect.hasAssertions();
const sdk = new cosmosclient.CosmosSDK('http://localhost:1317', 'testchain');
const privKey = new proto.cosmos.crypto.secp256k1.PrivKey({
key: await cosmosclient.generatePrivKeyFromMnemonic('joke door law post fragile cruel torch silver siren mechanic flush surround'),
});
const pubKey = privKey.pubKey();
const address = cosmosclient.AccAddress.fromPublicKey(pubKey);
expect(address.toString()).toStrictEqual('cosmos14ynfqqa6j5k3kcqm2ymf3l66d9x07ysxgnvdyx');
const fromAddress = address;
const toAddress = address;
// get account info
const account = await rest.cosmos.auth
.account(sdk, fromAddress)
.then((res) => res.data.account && cosmosclient.codec.unpackCosmosAny(res.data.account))
.catch((_) => undefined);
if (!(account instanceof proto.cosmos.auth.v1beta1.BaseAccount)) {
console.log(account);
return;
}
// build tx
const msgSend = new proto.cosmos.bank.v1beta1.MsgSend({
from_address: fromAddress.toString(),
to_address: toAddress.toString(),
amount: [{ denom: 'token', amount: '1' }],
});
const txBody = new proto.cosmos.tx.v1beta1.TxBody({
messages: [cosmosclient.codec.packAny(msgSend)],
});
const authInfo = new proto.cosmos.tx.v1beta1.AuthInfo({
signer_infos: [
{
public_key: cosmosclient.codec.packAny(pubKey),
mode_info: {
single: {
mode: proto.cosmos.tx.signing.v1beta1.SignMode.SIGN_MODE_DIRECT,
},
},
sequence: account.sequence,
},
],
fee: {
gas_limit: cosmosclient.Long.fromString('200000'),
},
});
// sign
const txBuilder = new cosmosclient.TxBuilder(sdk, txBody, authInfo);
const signDocBytes = txBuilder.signDocBytes(account.account_number);
txBuilder.addSignature(privKey.sign(signDocBytes));
// broadcast
const res = await rest.cosmos.tx.broadcastTx(sdk, {
tx_bytes: txBuilder.txBytes(),
mode: rest.cosmos.tx.BroadcastTxMode.Block,
});
console.log(res);
expect(res.data.tx_response?.raw_log?.match('failed')).toBeFalsy();
});
});
from cosmos-client-ts.
Version of Cosmos SDK in backend is less or equal than 0.39…plz use v0.39 of this library
Version of Cosmos SDK in backend is greater or equal than 0.40…plz use latest version of this library
from cosmos-client-ts.
hey thanks forthe reply!
so i am trying to hit a cosmos project (thornode) which is using 0.42.1- > https://gitlab.com/thorchain/thornode/-/blob/develop/go.mod#L14
I did refactor the code according to the readme. (see my branch here https://github.com/xchainjs/xchainjs-lib/blob/70de241c892d2f5645ed480892c572f293d1a16d/packages/xchain-cosmos/src/cosmos/sdk-client.ts#L197)
However, i am getting an error when posting to /cosmos/tx/v1beta1/txs
request
url: 'https://testnet.thornode.thorchain.info/cosmos/tx/v1beta1/txs',
method: 'post',
data: '"{\\"tx_bytes\\":\\"ClMKGgoUdGhvcmNoYWluL01zZ0RlcG9zaXQSAhIAEjU9OkJOQi5CTkI6dGJuYjFrbXUwbjZzNDRjejVqeGR2a3ZzdnJ6Z3I1N25kZzZhdHc1enJ5cxJYClAKRgofL2Nvc21vcy5jcnlwdG8uc2VjcDI1NmsxLlB1YktleRIjCiEDiNf6aunnRDzRn/FP2IVIBpjQ+noauhFnzkJE3UjpB6oSBAoCCAEYJxIEEICJehpA7grQwhk4N8V3FDw3oEHRY0iOzol3rDKyAliZRYZtJ8QKJG841E8V192bfmAs14clIts6EO9oOX9KLXZf0czi5w==\\",\\"mode\\":\\"BROADCAST_MODE_BLOCK\\"}"'
response
response: {
status: 400,
statusText: 'Bad Request',
data: {
code: 3,
message: 'json: cannot unmarshal string into Go value of type map[string]json.RawMessage',
details: []
}
}
the current code is calling POST /txs, which still exists in 0.41.x+(https://v1.cosmos.network/rpc/v0.42.6) , so i am thinking i maybe should still be hitting /txs and NOT /cosmos/tx/v1beta1/txs. not sure what the difference is between them....
is there any sample code about building and signing txs Using cosmos-client/cjs/openapi/api/TransactionsAPI? Since it's still supported?
const api: TransactionsApi = new TransactionsApi()
const response = await api.txsPost({
tx: {
msg: ['string'],
fee: {
gas: 'string',
amount: [
{
denom: 'stake',
amount: '50',
},
],
},
memo: 'string',
signature: {
signature: 'MEUCIQD02fsDPra8MtbRsyB1w7bqTM55Wu138zQbFcWx4+CFyAIge5WNPfKIuvzBZ69MyqHsqD8S1IwiEp+iUb6VSdtlpgY=',
pub_key: {
type: 'tendermint/PubKeySecp256k1',
value: 'Avz04VhtKJh8ACCVzlI8aTosGy0ikFXKIVHQ3jKMrosH',
},
account_number: '0',
sequence: '0',
},
},
mode: 'block',
})
again, thanks for the help!, i'm just really confused at this point....
from cosmos-client-ts.
The api POST /txs
is the api of Cosmos SDK v0.39. S o it is an old version of the api for announcing transactions.
The breaking changes between Cosmos SDK v0.39 and v0.40 also includes the change of schema of transaction JSON object.
If the blockchain which you want to use is v0.4x, please use POST /cosmos/tx/v1beta/txs
.
In the point of view where I saw your request data, I think it is suspicious that the escape sequence \\"
continues twice. How about \"
?
from cosmos-client-ts.
I think theres a bug in the current version 0.42.14.
i am testing against testnet using a seed with this address --> https://api.testnet.cosmos.network/cosmos/bank/v1beta1/balances/cosmos15yuxxfwzu5y5tvhrl4lws6hh925pgul025myjl
import { cosmosclient, proto, rest } from 'cosmos-client'
describe('bank', () => {
it('send', async () => {
expect.hasAssertions()
const sdk = new cosmosclient.CosmosSDK('https://api.testnet.cosmos.network', 'cosmoshub-testnet')
const privKey = new proto.cosmos.crypto.secp256k1.PrivKey({
key: await cosmosclient.generatePrivKeyFromMnemonic(process.env.PHRASE || ''),
})
const pubKey = privKey.pubKey()
const address = cosmosclient.AccAddress.fromPublicKey(pubKey)
expect(address.toString()).toStrictEqual('cosmos15yuxxfwzu5y5tvhrl4lws6hh925pgul025myjl')
const fromAddress = address
const toAddress = address
// get account info
const account = await rest.cosmos.auth
.account(sdk, fromAddress)
.then((res) => res.data.account && cosmosclient.codec.unpackCosmosAny(res.data.account))
.catch((_) => undefined)
if (!(account instanceof proto.cosmos.auth.v1beta1.BaseAccount)) {
console.log(account)
return
}
// build tx
const msgSend = new proto.cosmos.bank.v1beta1.MsgSend({
from_address: fromAddress.toString(),
to_address: toAddress.toString(),
amount: [{ denom: 'uphoton', amount: '1000' }],
})
const txBody = new proto.cosmos.tx.v1beta1.TxBody({
messages: [cosmosclient.codec.packAny(msgSend)],
})
const authInfo = new proto.cosmos.tx.v1beta1.AuthInfo({
signer_infos: [
{
public_key: cosmosclient.codec.packAny(pubKey),
mode_info: {
single: {
mode: proto.cosmos.tx.signing.v1beta1.SignMode.SIGN_MODE_DIRECT,
},
},
sequence: account.sequence,
},
],
fee: {
gas_limit: cosmosclient.Long.fromString('200000'),
},
})
// sign
const txBuilder = new cosmosclient.TxBuilder(sdk, txBody, authInfo)
const signDocBytes = txBuilder.signDocBytes(account.account_number)
txBuilder.addSignature(privKey.sign(signDocBytes))
// broadcast
try {
const res = await rest.cosmos.tx.broadcastTx(sdk, {
tx_bytes: txBuilder.txBytes(),
mode: rest.cosmos.tx.BroadcastTxMode.Block,
})
console.log(res)
expect(res.data.tx_response?.raw_log?.match('failed')).toBeFalsy()
} catch (error) {
console.log(error)
}
})
})
i get the exact same error with this code, whic is exactly the code in the readme
'json: cannot unmarshal string into Go value of type map[string]json.RawMessage'
details
Error: Request failed with status code 400
at createError (/Users/mike/mike/xchainjs/repo/xchainjs-lib/node_modules/axios/lib/core/createError.js:16:15)
at settle (/Users/mike/mike/xchainjs/repo/xchainjs-lib/node_modules/axios/lib/core/settle.js:17:12)
at IncomingMessage.handleStreamEnd (/Users/mike/mike/xchainjs/repo/xchainjs-lib/node_modules/axios/lib/adapters/http.js:269:11)
at IncomingMessage.emit (events.js:215:7)
at endReadableNT (_stream_readable.js:1184:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
config: {
url: 'https://api.testnet.cosmos.network/cosmos/tx/v1beta1/txs',
method: 'post',
data: '"{\\"tx_bytes\\":\\"CpIBCo8BChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEm8KLWNvc21vczE1eXV4eGZ3enU1eTV0dmhybDRsd3M2aGg5MjVwZ3VsMDI1bXlqbBItY29zbW9zMTV5dXh4Znd6dTV5NXR2aHJsNGx3czZoaDkyNXBndWwwMjVteWpsGg8KB3VwaG90b24SBDEwMDASWApQCkYKHy9jb3Ntb3MuY3J5cHRvLnNlY3AyNTZrMS5QdWJLZXkSIwohAj67jT56d5py32zCQqvh7t5TAzS/MeKPeE2wiznDlJsGEgQKAggBGAASBBDAmgwaQBKmuE+O4TODUioWbG5SZ5Z1ZNB29/weDVhJzT9fopHSRzZVgOlU9GOO+5U0tORFIFV3qkYFypzK05YXpDMD0+Q=\\",\\"mode\\":\\"BROADCAST_MODE_BLOCK\\"}"',
headers: {
Accept: 'application/json, text/plain, */*',
'Content-Type': 'application/json',
'User-Agent': 'axios/0.21.3',
'Content-Length': 463
},
transformRequest: [ [Function: transformRequest] ],
transformResponse: [ [Function: transformResponse] ],
timeout: 0,
adapter: [Function: httpAdapter],
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
validateStatus: [Function: validateStatus],
transitional: {
silentJSONParsing: true,
forcedJSONParsing: true,
clarifyTimeoutError: false
}
},
request: ClientRequest {
_events: [Object: null prototype] {
socket: [Function],
abort: [Function],
aborted: [Function],
connect: [Function],
error: [Function],
timeout: [Function],
prefinish: [Function: requestOnPrefinish]
},
_eventsCount: 7,
_maxListeners: undefined,
outputData: [],
outputSize: 0,
writable: true,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
socket: TLSSocket {
_tlsOptions: [Object],
_secureEstablished: true,
_securePending: false,
_newSessionPending: false,
_controlReleased: true,
_SNICallback: null,
servername: 'api.testnet.cosmos.network',
alpnProtocol: false,
authorized: true,
authorizationError: null,
encrypted: true,
_events: [Object: null prototype],
_eventsCount: 9,
connecting: false,
_hadError: false,
_parent: null,
_host: 'api.testnet.cosmos.network',
_readableState: [ReadableState],
readable: true,
_maxListeners: undefined,
_writableState: [WritableState],
writable: false,
allowHalfOpen: false,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: undefined,
_server: null,
ssl: [TLSWrap],
_requestCert: true,
_rejectUnauthorized: true,
parser: null,
_httpMessage: [Circular],
[Symbol(res)]: [TLSWrap],
[Symbol(asyncId)]: 32,
[Symbol(kHandle)]: [TLSWrap],
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBuffer)]: null,
[Symbol(kBufferCb)]: null,
[Symbol(kBufferGen)]: null,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0,
[Symbol(connect-options)]: [Object]
},
connection: TLSSocket {
_tlsOptions: [Object],
_secureEstablished: true,
_securePending: false,
_newSessionPending: false,
_controlReleased: true,
_SNICallback: null,
servername: 'api.testnet.cosmos.network',
alpnProtocol: false,
authorized: true,
authorizationError: null,
encrypted: true,
_events: [Object: null prototype],
_eventsCount: 9,
connecting: false,
_hadError: false,
_parent: null,
_host: 'api.testnet.cosmos.network',
_readableState: [ReadableState],
readable: true,
_maxListeners: undefined,
_writableState: [WritableState],
writable: false,
allowHalfOpen: false,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: undefined,
_server: null,
ssl: [TLSWrap],
_requestCert: true,
_rejectUnauthorized: true,
parser: null,
_httpMessage: [Circular],
[Symbol(res)]: [TLSWrap],
[Symbol(asyncId)]: 32,
[Symbol(kHandle)]: [TLSWrap],
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBuffer)]: null,
[Symbol(kBufferCb)]: null,
[Symbol(kBufferGen)]: null,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0,
[Symbol(connect-options)]: [Object]
},
_header: 'POST /cosmos/tx/v1beta1/txs HTTP/1.1\r\n' +
'Accept: application/json, text/plain, */*\r\n' +
'Content-Type: application/json\r\n' +
'User-Agent: axios/0.21.3\r\n' +
'Content-Length: 463\r\n' +
'Host: api.testnet.cosmos.network\r\n' +
'Connection: close\r\n' +
'\r\n',
_onPendingData: [Function: noopPendingOutput],
agent: Agent {
_events: [Object: null prototype],
_eventsCount: 1,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: [Object],
requests: {},
sockets: [Object],
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
maxCachedSessions: 100,
_sessionCache: [Object]
},
socketPath: undefined,
method: 'POST',
path: '/cosmos/tx/v1beta1/txs',
_ended: true,
res: IncomingMessage {
_readableState: [ReadableState],
readable: false,
_events: [Object: null prototype],
_eventsCount: 3,
_maxListeners: undefined,
socket: [TLSSocket],
connection: [TLSSocket],
httpVersionMajor: 1,
httpVersionMinor: 1,
httpVersion: '1.1',
complete: true,
headers: [Object],
rawHeaders: [Array],
trailers: {},
rawTrailers: [],
aborted: false,
upgrade: false,
url: '',
method: null,
statusCode: 400,
statusMessage: 'Bad Request',
client: [TLSSocket],
_consuming: false,
_dumped: false,
req: [Circular],
responseUrl: 'https://api.testnet.cosmos.network/cosmos/tx/v1beta1/txs',
redirects: []
},
aborted: false,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
_redirectable: Writable {
_writableState: [WritableState],
writable: true,
_events: [Object: null prototype],
_eventsCount: 2,
_maxListeners: undefined,
_options: [Object],
_ended: true,
_ending: true,
_redirectCount: 0,
_redirects: [],
_requestBodyLength: 463,
_requestBodyBuffers: [],
_onNativeResponse: [Function],
_currentRequest: [Circular],
_currentUrl: 'https://api.testnet.cosmos.network/cosmos/tx/v1beta1/txs'
},
[Symbol(kNeedDrain)]: false,
[Symbol(isCorked)]: false,
[Symbol(kOutHeaders)]: [Object: null prototype] {
accept: [Array],
'content-type': [Array],
'user-agent': [Array],
'content-length': [Array],
host: [Array]
}
},
response: {
status: 400,
statusText: 'Bad Request',
headers: {
date: 'Wed, 22 Sep 2021 03:02:41 GMT',
'content-type': 'application/json',
'content-length': '130',
connection: 'close',
'x-server-time': '1632279761',
'strict-transport-security': 'max-age=15724800; includeSubDomains'
},
config: {
url: 'https://api.testnet.cosmos.network/cosmos/tx/v1beta1/txs',
method: 'post',
data: '"{\\"tx_bytes\\":\\"CpIBCo8BChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEm8KLWNvc21vczE1eXV4eGZ3enU1eTV0dmhybDRsd3M2aGg5MjVwZ3VsMDI1bXlqbBItY29zbW9zMTV5dXh4Znd6dTV5NXR2aHJsNGx3czZoaDkyNXBndWwwMjVteWpsGg8KB3VwaG90b24SBDEwMDASWApQCkYKHy9jb3Ntb3MuY3J5cHRvLnNlY3AyNTZrMS5QdWJLZXkSIwohAj67jT56d5py32zCQqvh7t5TAzS/MeKPeE2wiznDlJsGEgQKAggBGAASBBDAmgwaQBKmuE+O4TODUioWbG5SZ5Z1ZNB29/weDVhJzT9fopHSRzZVgOlU9GOO+5U0tORFIFV3qkYFypzK05YXpDMD0+Q=\\",\\"mode\\":\\"BROADCAST_MODE_BLOCK\\"}"',
headers: [Object],
transformRequest: [Array],
transformResponse: [Array],
timeout: 0,
adapter: [Function: httpAdapter],
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
validateStatus: [Function: validateStatus],
transitional: [Object]
},
request: ClientRequest {
_events: [Object: null prototype],
_eventsCount: 7,
_maxListeners: undefined,
outputData: [],
outputSize: 0,
writable: true,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
socket: [TLSSocket],
connection: [TLSSocket],
_header: 'POST /cosmos/tx/v1beta1/txs HTTP/1.1\r\n' +
'Accept: application/json, text/plain, */*\r\n' +
'Content-Type: application/json\r\n' +
'User-Agent: axios/0.21.3\r\n' +
'Content-Length: 463\r\n' +
'Host: api.testnet.cosmos.network\r\n' +
'Connection: close\r\n' +
'\r\n',
_onPendingData: [Function: noopPendingOutput],
agent: [Agent],
socketPath: undefined,
method: 'POST',
path: '/cosmos/tx/v1beta1/txs',
_ended: true,
res: [IncomingMessage],
aborted: false,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
_redirectable: [Writable],
[Symbol(kNeedDrain)]: false,
[Symbol(isCorked)]: false,
[Symbol(kOutHeaders)]: [Object: null prototype]
},
data: {
code: 3,
message: 'json: cannot unmarshal string into Go value of type map[string]json.RawMessage',
details: []
}
},
isAxiosError: true,
toJSON: [Function: toJSON]
}```
from cosmos-client-ts.
Please tell me the content of go.mod
of the blockchain you are testing.
from cosmos-client-ts.
https://api.testnet.cosmos.network/node_info
from cosmos-client-ts.
Thank you.
I confirmed that tx announce is succeeded when both the blockchain is v0.41.0 and v0.42.9.
I created the blockchain with starport. https://github.com/tendermint/starport
v0.41.0
PASS src/rest/cosmos/bank/bank.spec.ts
bank
✓ send (914 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 3.983 s
Ran all test suites matching /bank/i.
console.log
{
data: {
tx_response: {
height: '24',
txhash: '6AEF2D2A26BAFAD048998CCAB4128B685D9595E0ADF3DDE63CCA8BB12FDCD166',
codespace: '',
code: 0,
data: '0A060A0473656E64',
raw_log: '[{"events":[{"type":"message","attributes":[{"key":"action","value":"send"},{"key":"sender","value":"cosmos18j8jjel0deh2t5yamxy6tnafd6dng36mddhy39"},{"key":"module","value":"bank"}]},{"type":"transfer","attributes":[{"key":"recipient","value":"cosmos18j8jjel0deh2t5yamxy6tnafd6dng36mddhy39"},{"key":"sender","value":"cosmos18j8jjel0deh2t5yamxy6tnafd6dng36mddhy39"},{"key":"amount","value":"1token"}]}]}]',
logs: [Array],
info: '',
gas_wanted: '200000',
gas_used: '50126',
tx: null,
timestamp: ''
}
},
status: 200,
statusText: 'OK',
headers: { 'content-type': 'application/json' },
config: {
url: 'http://localhost:1317/cosmos/tx/v1beta1/txs',
method: 'post',
data: '{"tx_bytes":"Co0BCooBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEmoKLWNvc21vczE4ajhqamVsMGRlaDJ0NXlhbXh5NnRuYWZkNmRuZzM2bWRkaHkzORItY29zbW9zMThqOGpqZWwwZGVoMnQ1eWFteHk2dG5hZmQ2ZG5nMzZtZGRoeTM5GgoKBXRva2VuEgExElgKUApGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQPXxcc5qLLxXq+3gWDdnT6uTxADXOcyrADAKy5BXEC2nBIECgIIARgBEgQQwJoMGkA0kQmEgbEhtjPwPbv90H2JgNXcpRipAQ6Wz8HWUdguyA951Qhg2Y8MvzY3UGQ31xmrz2qCUW+FC9NJ6F0S0e/b","mode":"BROADCAST_MODE_BLOCK"}',
headers: {
Accept: 'application/json, text/plain, */*',
'Content-Type': 'application/json'
},
transformRequest: [ [Function: transformRequest] ],
transformResponse: [ [Function: transformResponse] ],
timeout: 0,
adapter: [Function: xhrAdapter],
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
validateStatus: [Function: validateStatus]
},
request: XMLHttpRequest {}
}
at src/rest/cosmos/bank/bank.spec.ts:70:13
v0.42.9
PASS src/rest/cosmos/bank/bank.spec.ts
bank
✓ send (916 ms)
console.log
{
data: {
tx_response: {
height: '17',
txhash: 'D54777514171BA337D547DCAD8F952421F5659539947B179622158216AC1572A',
codespace: '',
code: 0,
data: '0A060A0473656E64',
raw_log: '[{"events":[{"type":"message","attributes":[{"key":"action","value":"send"},{"key":"sender","value":"cosmos1vd3qe4rk3ygkeftuk90t6m4f5plfgtfs7023lw"},{"key":"module","value":"bank"}]},{"type":"transfer","attributes":[{"key":"recipient","value":"cosmos1vd3qe4rk3ygkeftuk90t6m4f5plfgtfs7023lw"},{"key":"sender","value":"cosmos1vd3qe4rk3ygkeftuk90t6m4f5plfgtfs7023lw"},{"key":"amount","value":"1token"}]}]}]',
logs: [Array],
info: '',
gas_wanted: '200000',
gas_used: '50126',
tx: null,
timestamp: ''
}
},
status: 200,
statusText: 'OK',
headers: { 'content-type': 'application/json' },
config: {
url: 'http://localhost:1317/cosmos/tx/v1beta1/txs',
method: 'post',
data: '{"tx_bytes":"Co0BCooBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEmoKLWNvc21vczF2ZDNxZTRyazN5Z2tlZnR1azkwdDZtNGY1cGxmZ3RmczcwMjNsdxItY29zbW9zMXZkM3FlNHJrM3lna2VmdHVrOTB0Nm00ZjVwbGZndGZzNzAyM2x3GgoKBXRva2VuEgExElgKUApGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQNzZuRnB6ccTvdufpQsoe7rvxKUqgPelicwLjhp0H3zvRIECgIIARgBEgQQwJoMGkA9q8LTcLlcTlRhxy1CboI+LobkiH+3GhCEmWaGJpvcQVJ2hdjk2vwLkrNvu525PuRAQmZRb3RKvHX2ueZwaM8Y","mode":"BROADCAST_MODE_BLOCK"}',
headers: {
Accept: 'application/json, text/plain, */*',
'Content-Type': 'application/json'
},
transformRequest: [ [Function: transformRequest] ],
transformResponse: [ [Function: transformResponse] ],
timeout: 0,
adapter: [Function: xhrAdapter],
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
validateStatus: [Function: validateStatus]
},
request: XMLHttpRequest {}
}
at src/rest/cosmos/bank/bank.spec.ts:70:13
The difference between my log and yours is that there are many suspicious \\
like \\"tx_bytes\\":
.
from cosmos-client-ts.
hey thanks for looking into this again. i couldn't find the root cause, so ended up with this workaround
// this broadcast finction does not work!!
// const res = await rest.cosmos.tx.broadcastTx(this.sdk, {
// tx_bytes: txBuilder.txBytes(),
// mode: rest.cosmos.tx.BroadcastTxMode.Sync,
// })
const res = await axios.post(`${this.server}/cosmos/tx/v1beta1/txs`, {
tx_bytes: txBuilder.txBytes(),
mode: rest.cosmos.tx.BroadcastTxMode.Block,
})
from cosmos-client-ts.
Oh I know that you are using the axios post method directly instead of using the tx post method in this library.
I think it is the cause. Json marshalling is suspicious. \\
may be the cause of failure in JSON unmarshalling in go backend.
from cosmos-client-ts.
yeah that was definitely the cause. but not sure why
{
tx_bytes: txBuilder.txBytes(),
mode: rest.cosmos.tx.BroadcastTxMode.Block,
}
ends up being encoded as an escaped string....
from cosmos-client-ts.
How about checking the configurations of Axios?
from cosmos-client-ts.
I found a good thread. Plz refer to it.
https://stackoverflow.com/questions/66268561/axios-adds-extra-trailing-slash-in-body-values
from cosmos-client-ts.
you may need set AxiosConfig
headers: {
"Content-Type": "application/json",
},
responseType: "json",
from cosmos-client-ts.
Related Issues (20)
- Module parse failed: Unexpected token (1:9) HOT 1
- unable to resolve type URL : tx parse error HOT 1
- support custom HTTP headers on requests HOT 2
- Must modify the way to generate js codes from proto files #4
- The Bug of google.protobuf.Timestamp (MsgPlaceBid) when simulating Tx
- actionsでのcdにてバージョンをreleaseにあわせるように HOT 1
- CD
- Automatically start a blockchain server in localhost when running test
- Is `sr25519` library still required? HOT 6
- use git submodule to manage .proto files and swagger file
- How to get Linear point from AccAddress HOT 4
- Where is openapi.yaml source file ? HOT 2
- Option for `gas-adjustment` HOT 1
- separate ibc module
- gentx,simulateのためのjsonを吐き出すやつをもっと固める HOT 1
- Failed broadcast tx signed by ledger HOT 1
- multisig test
- jest in CI
- Docker issue HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cosmos-client-ts.