forked from terra-money/terraswap-graph
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #12 from terraswap/feat/sender
feat: sender
- Loading branch information
Showing
22 changed files
with
538 additions
and
131 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
import axios, { AxiosInstance, AxiosRequestConfig } from 'axios' | ||
import * as http from 'http'; | ||
import * as https from 'https'; | ||
import { ClassicFcdContractMsgSenderRes, fcd } from './interfaces'; | ||
|
||
|
||
export class ClassicFcd implements fcd { | ||
private url = process.env.TERRA_FCD || 'http://localhost:8080' | ||
private client: AxiosInstance; | ||
|
||
constructor(url?: string, config?: AxiosRequestConfig) { | ||
if (url) { | ||
this.url = url | ||
} | ||
const defaultConfig = { | ||
baseURL: this.url, | ||
httpAgent: new http.Agent({ keepAlive: true, maxTotalSockets: 5, keepAliveMsecs: 5 * 1000 }), | ||
httpsAgent: new https.Agent({ keepAlive: true, maxTotalSockets: 5 }), | ||
timeout: 10 * 1000, | ||
} | ||
this.client = axios.create({ | ||
...defaultConfig, | ||
...config, | ||
}) | ||
} | ||
|
||
|
||
async getContractMsgSender(hash: string, contract: string): Promise<string> { | ||
try { | ||
const result = await this.client.get<ClassicFcdContractMsgSenderRes>(`${this.url}/v1/tx/${hash}`) | ||
let sender: string; | ||
let found = false; | ||
for (let i = 0; i < result.data?.tx?.value?.msg.length && !found; i++) { | ||
const msg = result.data?.tx?.value.msg[i] | ||
// maybe this msg execute the contract | ||
if (!found && msg["type"]?.includes("Contract")) { | ||
sender = msg.value.sender | ||
} | ||
// contract direct msg | ||
if (msg.value.contract === contract) { | ||
sender = msg.value.sender | ||
found = true | ||
} | ||
} | ||
return sender | ||
} catch (err: any) { | ||
if (err.isAxiosError && err.response?.status === 500) { | ||
const res = err.response.data | ||
if (res.code !== 0 && res.message?.includes('contract query failed: unknown request')) { | ||
return undefined | ||
} | ||
} | ||
throw err | ||
} | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
export interface fcd { | ||
getContractMsgSender(hash: string, contract: string): Promise<string> | ||
} | ||
|
||
export interface ClassicFcdContractMsgSenderRes { | ||
tx: { | ||
value: { | ||
msg: { | ||
'type': string | ||
value: { | ||
sender: string | ||
contract?: string | ||
} | ||
}[] | ||
} | ||
} | ||
height: string | ||
txhash: string | ||
} | ||
|
||
export interface MainnetFcdContractMsgSenderRes { | ||
tx: { | ||
body: { | ||
messages: { | ||
'@type': string | ||
sender: string | ||
contract?: string | ||
}[] | ||
} | ||
} | ||
tx_response: { | ||
height: string | ||
txhash: string | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
import axios, { AxiosInstance, AxiosRequestConfig } from 'axios' | ||
import * as http from 'http'; | ||
import * as https from 'https'; | ||
import { MainnetFcdContractMsgSenderRes, fcd } from './interfaces'; | ||
|
||
|
||
export class MainnetFcd implements fcd { | ||
private url = process.env.TERRA_FCD || 'http://localhost:8080' | ||
private client: AxiosInstance; | ||
|
||
constructor(url?: string, config?: AxiosRequestConfig) { | ||
if (url) { | ||
this.url = url | ||
} | ||
const defaultConfig = { | ||
baseURL: this.url, | ||
httpAgent: new http.Agent({ keepAlive: true, maxTotalSockets: 5, keepAliveMsecs: 5 * 1000 }), | ||
httpsAgent: new https.Agent({ keepAlive: true, maxTotalSockets: 5 }), | ||
timeout: 10 * 1000, | ||
} | ||
this.client = axios.create({ | ||
...defaultConfig, | ||
...config, | ||
}) | ||
} | ||
|
||
|
||
async getContractMsgSender(hash: string, contract: string): Promise<string> { | ||
try { | ||
const result = await this.client.get<MainnetFcdContractMsgSenderRes>(`${this.url}/v1/tx/${hash}`) | ||
let sender: string; | ||
let found = false; | ||
for (let i = 0; i < result.data?.tx?.body?.messages.length && !found; i++) { | ||
const msg = result.data.tx.body.messages[i] | ||
// maybe this msg execute the contract | ||
if (!found && msg["@type"]?.includes("Contract")) { | ||
sender = msg.sender | ||
} | ||
// contract direct msg | ||
if (msg.contract === contract) { | ||
sender = msg.sender | ||
found = true | ||
} | ||
} | ||
return sender | ||
} catch (err: any) { | ||
if (err.isAxiosError && err.response?.status === 500) { | ||
const res = err.response.data | ||
if (res.code !== 0 && res.message?.includes('contract query failed: unknown request')) { | ||
return undefined | ||
} | ||
} | ||
throw err | ||
} | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,6 @@ | ||
export const isClassic = process.env.TERRA_CHAIN_ID.includes('columbus') | ||
export const isClassic = process.env.TERRA_CHAIN_ID?.includes('columbus') | ||
export const isColumbus4 = process.env.TERRA_CHAIN_ID?.includes('columbus-4') | ||
|
||
export * from './block' | ||
export { default as oracle } from './oracle' | ||
export { default as lcd } from './lcd' |
Oops, something went wrong.