Initial commit with translated description
This commit is contained in:
85
scripts/shared/attestation.js
Normal file
85
scripts/shared/attestation.js
Normal file
@@ -0,0 +1,85 @@
|
||||
const { ethers } = require("ethers");
|
||||
const { DID } = require("@iden3/js-iden3-core");
|
||||
|
||||
const ATTESTATION_SCHEMA_ID =
|
||||
"0xca354bee6dc5eded165461d15ccb13aceb6f77ebbb1fd3fe45aca686097f2911"; // bytes32
|
||||
|
||||
const ATTESTER_DID = ""; // string
|
||||
const ATTESTER_IDEN3_ID = 0n; // uint256
|
||||
const ATTESTER_ETH_ADDRESS = "0x0000000000000000000000000000000000000000"; // address
|
||||
|
||||
const EXPIRATION_TIME = 0n; // uint256 — 0 means no expiration
|
||||
const REVOCABLE = false; // bool
|
||||
const REF_ID =
|
||||
"0x0000000000000000000000000000000000000000000000000000000000000000"; // bytes32
|
||||
const DATA = "0x"; // bytes
|
||||
|
||||
function extractIdFromDid(did) {
|
||||
return DID.idFromDID(DID.parse(did)).bigInt();
|
||||
}
|
||||
|
||||
function buildJsonAttestation(req) {
|
||||
return {
|
||||
schemaId: ATTESTATION_SCHEMA_ID,
|
||||
attester: {
|
||||
did: ATTESTER_DID,
|
||||
iden3Id: ATTESTER_IDEN3_ID.toString(),
|
||||
ethereumAddress: ATTESTER_ETH_ADDRESS,
|
||||
},
|
||||
recipient: {
|
||||
did: req.recipientDid,
|
||||
iden3Id: extractIdFromDid(req.recipientDid).toString(),
|
||||
ethereumAddress: req.recipientEthAddress,
|
||||
},
|
||||
expirationTime: EXPIRATION_TIME.toString(),
|
||||
revocable: REVOCABLE,
|
||||
refId: REF_ID,
|
||||
data: DATA,
|
||||
};
|
||||
}
|
||||
|
||||
function buildEncodedAttestation(req) {
|
||||
const encoded = ethers.AbiCoder.defaultAbiCoder().encode(
|
||||
[
|
||||
"bytes32", // schemaId
|
||||
"string", // attester.did
|
||||
"uint256", // attester.iden3Id
|
||||
"address", // attester.ethereumAddress
|
||||
"string", // recipient.did
|
||||
"uint256", // recipient.iden3Id
|
||||
"address", // recipient.ethereumAddress
|
||||
"uint256", // expirationTime
|
||||
"bool", // revocable
|
||||
"bytes32", // refId
|
||||
"bytes", // data
|
||||
],
|
||||
[
|
||||
ATTESTATION_SCHEMA_ID,
|
||||
ATTESTER_DID,
|
||||
ATTESTER_IDEN3_ID,
|
||||
ATTESTER_ETH_ADDRESS,
|
||||
req.recipientDid,
|
||||
extractIdFromDid(req.recipientDid),
|
||||
req.recipientEthAddress,
|
||||
EXPIRATION_TIME,
|
||||
REVOCABLE,
|
||||
REF_ID,
|
||||
DATA,
|
||||
],
|
||||
);
|
||||
return encoded;
|
||||
}
|
||||
|
||||
function computeAttestationHash(req) {
|
||||
const hashHex = ethers.keccak256(buildEncodedAttestation(req));
|
||||
return (
|
||||
BigInt(hashHex) &
|
||||
BigInt("0x0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")
|
||||
).toString();
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
buildEncodedAttestation,
|
||||
computeAttestationHash,
|
||||
buildJsonAttestation,
|
||||
};
|
||||
Reference in New Issue
Block a user