-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathoffsetcarbon_celo.js
More file actions
102 lines (74 loc) · 4.02 KB
/
offsetcarbon_celo.js
File metadata and controls
102 lines (74 loc) · 4.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import { Ident } from "provide-js";
import { Vault } from "provide-js";
import { readFile } from "fs/promises";
console.log("begin carbon offset");
//*******************//
// PRVD CONNECTIVITY //
//*******************//
//load the refresh token from app
let user_params = JSON.parse(await readFile("./env/prvduser.json", "utf8"));
var REFRESH_TOKEN = user_params.refresh_token;
var ORG_ID = user_params.organization_id;
var USER_ID = user_params.user_id;
var access_token_request = {};
access_token_request.organization_id = ORG_ID;
access_token_request.user_id = USER_ID;
//get the access token
const IDENT_PROXY = new Ident(REFRESH_TOKEN);
const ACCESS_TOKEN = await IDENT_PROXY.createToken(access_token_request);
//console.log('access token generated:' + ACCESS_TOKEN.accessToken)
//get the vault
const VAULT_PROXY = new Vault(ACCESS_TOKEN.accessToken);
const ECO_VAULTS = await VAULT_PROXY.fetchVaults();
var ECO_VAULT_ID = ECO_VAULTS.results[0].id;
//get the key ids ~ no private keys exposed!!
const ECO_VAULT_KEY_IDS = await VAULT_PROXY.fetchVaultKeys(ECO_VAULT_ID);
var ECO_WALLET = ECO_VAULT_KEY_IDS.results.filter(vaultkeys => vaultkeys.spec === "secp256k1");
const ECO_KEY_ID = ECO_WALLET[0].id;
const ECO_WALLET_ADDRESS = ECO_WALLET[0].address;
//*******************//
// RETIRE CARBON //
//*******************//
var SOURCE_TOKEN = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"; //Cheesecake USD
var POOL_TOKEN = "0x4c5f90C50Ca9F849bb75D93a393A4e1B6E68Accb"; //Toucan Protocol BCT - Celo Alfajores
// 0xfb60a08855389F3c0A66b29aB9eFa911ed5cbCB5 Toucan Protocol NCT - Celo Alfajores https://app.toucan.earth/contracts#celo-alfajores
// specific retirements
//var PROJECT_TOKEN = "0x04943c19896c776c78770429ec02c5384ee78292";
// setup the retirement request
var RETIREMENT_REQUEST_PARAMS = {};
RETIREMENT_REQUEST_PARAMS.network_id = "d818afb9-df2f-4e46-963a-f7b6cb7655d2"; //PRVD stack chain id for Celo Alfajores testnet
RETIREMENT_REQUEST_PARAMS.description = "Provide ECO - retirement via NodeJs script on Celo Alfajores";
RETIREMENT_REQUEST_PARAMS.value = 0.1234; //Amount of carbon you wish to retire
RETIREMENT_REQUEST_PARAMS.source_token_contract_address = SOURCE_TOKEN;
RETIREMENT_REQUEST_PARAMS.pool_token_contract_address = POOL_TOKEN;
RETIREMENT_REQUEST_PARAMS.beneficiary_address = ECO_WALLET_ADDRESS;
RETIREMENT_REQUEST_PARAMS.beneficiary_name = "Provide ECO Test User";
RETIREMENT_REQUEST_PARAMS.retirement_message = "Provide ECO API - Node.js batch script example with CELO Alfajores";
RETIREMENT_REQUEST_PARAMS.provider = "celo";
var bearertoken = 'Bearer '+ACCESS_TOKEN.accessToken;
const RETIREMENT_REQUEST = await fetch("https://api.providepayments.com/api/v1/eco/retire_carbon_requests", {
method: "POST",
headers: {'Authorization': bearertoken, 'Content-type': 'application/json'},
body: JSON.stringify(RETIREMENT_REQUEST_PARAMS),
});
const RETIREMENT_REQ_DATA_RESP = await RETIREMENT_REQUEST.json();
const HASHED_MESSAGE = RETIREMENT_REQ_DATA_RESP.hashed_data;
// sign the transaction
const SIGNED_TXN = await VAULT_PROXY.signMessage(ECO_VAULT_ID, ECO_KEY_ID, HASHED_MESSAGE);
// broadcast the transaction
var RETIREMENT_BROADCAST_PARAMS = {};
RETIREMENT_BROADCAST_PARAMS.data = RETIREMENT_REQ_DATA_RESP.data;
RETIREMENT_BROADCAST_PARAMS.request_id = RETIREMENT_REQ_DATA_RESP.id;
RETIREMENT_BROADCAST_PARAMS.signature = SIGNED_TXN.signature;
RETIREMENT_BROADCAST_PARAMS.signer = ECO_WALLET_ADDRESS;
console.log(JSON.stringify(RETIREMENT_REQUEST_PARAMS));
var retirement_req_url = 'https://api.providepayments.com/api/v1/eco/retire_carbon_requests/' + RETIREMENT_REQ_DATA_RESP.id + '/retire';
console.log(retirement_req_url);
const RETIREMENT_BROADCAST = await fetch(retirement_req_url, {
method: "POST",
headers: {'Authorization': bearertoken, 'Content-type': 'application/json'},
body: JSON.stringify(RETIREMENT_BROADCAST_PARAMS),
});
const RETIREMENT_BROADCAST_RESP = await RETIREMENT_BROADCAST.json();
console.log(RETIREMENT_BROADCAST_RESP);
console.log("end carbon offset");