Skip to content

Commit 0f3484e

Browse files
authored
Merge pull request #1706 from demergent-labs/backend_fetch_http
Backend fetch http
2 parents 7324aac + a0df8e8 commit 0f3484e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+11127
-262
lines changed

.github/workflows/test.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ jobs:
9393
"examples/date",
9494
"examples/ethereum_json_rpc",
9595
"examples/ethers",
96+
"examples/ethers_base",
9697
"examples/express",
9798
"examples/fetch_ic",
9899
"examples/file_protocol",
@@ -101,6 +102,7 @@ jobs:
101102
"examples/guard_functions",
102103
"examples/heartbeat",
103104
"examples/hello_world",
105+
"examples/http_outcall_fetch",
104106
"examples/hybrid_canister",
105107
"examples/ic_api",
106108
"examples/ic_evm_rpc",

examples/autoreload/test/tests.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ export function getTests(canisterId: string): Test[] {
157157
},
158158
{
159159
name: 'waiting for Azle to reload',
160-
wait: 10_000
160+
wait: 30_000
161161
},
162162
{
163163
name: '/test',

examples/ethereum_json_rpc/src/index.ts

Lines changed: 38 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@ export default Canister({
3232

3333
const url = urlOpt.Some;
3434

35-
const httpResponse = await getBalance(url, ethereumAddress);
36-
37-
return Buffer.from(httpResponse.body.buffer).toString('utf-8');
35+
return await getBalance(url, ethereumAddress);
3836
}),
3937
ethGetBlockByNumber: update([nat32], text, async (number) => {
4038
const urlOpt = stableStorage.get('ethereumUrl');
@@ -45,9 +43,7 @@ export default Canister({
4543

4644
const url = urlOpt.Some;
4745

48-
const httpResponse = await getBlockByNumber(url, number);
49-
50-
return Buffer.from(httpResponse.body.buffer).toString('utf-8');
46+
return await getBlockByNumber(url, number);
5147
}),
5248
ethTransform: query([HttpTransformArgs], HttpResponse, (args) => {
5349
return {
@@ -59,46 +55,26 @@ export default Canister({
5955

6056
async function getBalance(url: string, ethereumAddress: string) {
6157
if (process.env.AZLE_TEST_FETCH === 'true') {
62-
const response = await fetch(`icp://aaaaa-aa/http_request`, {
63-
body: serialize({
64-
args: [
65-
{
66-
url,
67-
max_response_bytes: [2_000n],
68-
method: {
69-
post: null
70-
},
71-
headers: [],
72-
body: [
73-
Buffer.from(
74-
JSON.stringify({
75-
jsonrpc: '2.0',
76-
method: 'eth_getBalance',
77-
params: [ethereumAddress, 'earliest'],
78-
id: 1
79-
}),
80-
'utf-8'
81-
)
82-
],
83-
transform: [
84-
{
85-
function: [ic.id(), 'ethTransform'] as [
86-
Principal,
87-
string
88-
],
89-
context: Uint8Array.from([])
90-
}
91-
]
92-
}
93-
],
94-
cycles: 50_000_000n
58+
ic.setOutgoingHttpOptions({
59+
maxResponseBytes: 2_000n,
60+
cycles: 50_000_000n,
61+
transformMethodName: 'ethTransform'
62+
});
63+
64+
const response = await fetch(url, {
65+
method: 'POST',
66+
body: JSON.stringify({
67+
jsonrpc: '2.0',
68+
method: 'eth_getBalance',
69+
params: [ethereumAddress, 'earliest'],
70+
id: 1
9571
})
9672
});
97-
const responseJson = await response.json();
73+
const responseText = await response.text();
9874

99-
return responseJson;
75+
return responseText;
10076
} else {
101-
return await ic.call(managementCanister.http_request, {
77+
const httpResponse = await ic.call(managementCanister.http_request, {
10278
args: [
10379
{
10480
url,
@@ -129,50 +105,32 @@ async function getBalance(url: string, ethereumAddress: string) {
129105
],
130106
cycles: 50_000_000n
131107
});
108+
109+
return Buffer.from(httpResponse.body.buffer).toString('utf-8');
132110
}
133111
}
134112
async function getBlockByNumber(url: string, number: number) {
135113
if (process.env.AZLE_TEST_FETCH === 'true') {
136-
const response = await fetch(`icp://aaaaa-aa/http_request`, {
137-
body: serialize({
138-
args: [
139-
{
140-
url,
141-
max_response_bytes: [2_000n],
142-
method: {
143-
post: null
144-
},
145-
headers: [],
146-
body: [
147-
Buffer.from(
148-
JSON.stringify({
149-
jsonrpc: '2.0',
150-
method: 'eth_getBlockByNumber',
151-
params: [`0x${number.toString(16)}`, false],
152-
id: 1
153-
}),
154-
'utf-8'
155-
)
156-
],
157-
transform: [
158-
{
159-
function: [ic.id(), 'ethTransform'] as [
160-
Principal,
161-
string
162-
],
163-
context: Uint8Array.from([])
164-
}
165-
]
166-
}
167-
],
168-
cycles: 50_000_000n
114+
ic.setOutgoingHttpOptions({
115+
maxResponseBytes: 2_000n,
116+
cycles: 50_000_000n,
117+
transformMethodName: 'ethTransform'
118+
});
119+
120+
const response = await fetch(url, {
121+
method: 'POST',
122+
body: JSON.stringify({
123+
jsonrpc: '2.0',
124+
method: 'eth_getBlockByNumber',
125+
params: [`0x${number.toString(16)}`, false],
126+
id: 1
169127
})
170128
});
171-
const responseJson = await response.json();
129+
const responseText = await response.text();
172130

173-
return responseJson;
131+
return responseText;
174132
} else {
175-
return await ic.call(managementCanister.http_request, {
133+
const httpResponse = await ic.call(managementCanister.http_request, {
176134
args: [
177135
{
178136
url,
@@ -203,5 +161,7 @@ async function getBlockByNumber(url: string, number: number) {
203161
],
204162
cycles: 50_000_000n
205163
});
164+
165+
return Buffer.from(httpResponse.body.buffer).toString('utf-8');
206166
}
207167
}

examples/ethers_base/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.azle
2+
.dfx
3+
node_modules

examples/ethers_base/dfx.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"canisters": {
3+
"server": {
4+
"type": "custom",
5+
"main": "src/server.ts",
6+
"candid": "src/server.did",
7+
"candid_gen": "http",
8+
"build": "npx azle server",
9+
"wasm": ".azle/server/server.wasm",
10+
"gzip": true,
11+
"metadata": [
12+
{
13+
"name": "candid:service",
14+
"path": "src/server.did"
15+
},
16+
{
17+
"name": "cdk:name",
18+
"content": "azle"
19+
}
20+
]
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)