Last active
October 13, 2022 21:46
-
-
Save critesjosh/71d5534511627b6e1bccd790be747606 to your computer and use it in GitHub Desktop.
A node script to run a phone number lookup with ODIS on the Celo blockchain
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
// In this example, we will go over how to look up a Celo address that is registered with a phone number with ODIS | |
// 1. Import the appropriate packages | |
const ContractKit = require('@celo/contractkit') | |
const OdisUtils = require('@celo/identity').OdisUtils | |
// 2. Import these packages to help with private key management for the example | |
const privateKeyToAddress = require('@celo/utils/lib/address').privateKeyToAddress | |
const normalizeAddressWith0x = require('@celo/utils/lib/address').normalizeAddressWith0x | |
// 3. connect contractKit to mainnet via Forno | |
const contractKit = ContractKit.newKit('https://rc1-forno.celo-testnet.org') | |
// 4. Specify the authentication method and contractKit instance | |
const authSigner = { | |
authenticationMethod: OdisUtils.Query.AuthenticationMethod.WALLET_KEY, | |
contractKit: contractKit | |
} | |
// 5. Set a phone number to lookup | |
let phoneNumber = '+11234567890' // this is a fake number | |
let context = 'mainnet' | |
// 6. You will need a private key from which to query ODIS. The address associated with this private key | |
// will be the account from which the query is made. The account must have a small balance (0.005 CELO or 0.01 cUSD). | |
const privateKey = '3a26ebc37944c305670a21ea6a5d16c1084db2f18bc6635ba95f487e5c59868f' | |
const from = normalizeAddressWith0x(privateKeyToAddress(privateKey)) | |
// 7. Import the account to contractKit to sign the query request | |
contractKit.addAccount(privateKey) | |
// 8. Wrap the async functions so we can await the responses | |
let run = async function(){ | |
// 9. Make the request to ODIS | |
const res = await OdisUtils.PhoneNumberIdentifier.getPhoneNumberIdentifier( | |
phoneNumber, | |
from, | |
authSigner, | |
OdisUtils.Query.getServiceContext(context) | |
) | |
console.log(res) | |
/* | |
{ e164Number: '+11234567890', | |
phoneHash: | |
'0xd5b4028307ee557404bc6819790326dc0194cfc62c0ae5adcd79adb25da0bae8', | |
pepper: '+8swDgOD5m138' } | |
*/ | |
// 10. Look up the address registered to the returned phoneHash | |
const attesationsContract = await contractKit.contracts.getAttestations() | |
let mapping = await attesationsContract.lookupIdentifiers([res.phoneHash]) | |
console.log(mapping) | |
/* | |
{ '0xd5b4028307ee557404bc6819790326dc0194cfc62c0ae5adcd79adb25da0bae8': | |
{ '0xDcD7335735F2c4bC7228E3d59D3D05e69Bb73809': { completed: 3, total: 4 }, | |
'0xE609135E96aA3424c05e940A6D2693d674bc9fDD': { completed: 3, total: 3 } } } | |
*/ | |
} | |
run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment