moon-did-resolver
Version:
Resolve DID documents for ethereum addresses and public keys
172 lines (141 loc) • 5.71 kB
text/typescript
// @ts-nocheck
import { concat, getAddress, getBytes, keccak256, toBeHex, toUtf8Bytes, zeroPadValue } from 'ethers'
import MoonbeamDIDRegistry from '../config/MoonbeamDIDRegistry.json'
import { MoonDidController } from '../controller'
import { MESSAGE_PREFIX, address } from '../helpers'
import { randomPrivatePublicKeys } from './testUtils'
import { ethers } from 'ethers'
import web3jsRaw from './web3Raw'
import { Resolver } from 'did-resolver'
import { MoonDidResolver, getResolver } from '../resolver'
const ABI = MoonbeamDIDRegistry.abi
// const _CONTRACT_ADDRESS = '0x5fbdb2315678afecb367f032d93f642f64180aa3' // Local Node
// const _PROVIDER = 'http://127.0.0.1:8545/'
// const ETHER_ACC = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // Local Node
// const privateKeyString = 'ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'
// const privateKey = Buffer.from(privateKeyString, 'hex')
const _CONTRACT_ADDRESS = '0x1205411db2cC925253A57299f3313075DDD48439' // Moonbeam Alpha
const _PROVIDER = 'https://rpc.api.moonbase.moonbeam.network'
const ETHER_ACC = '0x497A68118e2a2aCA1d9B92452694E2bb063B1F29'
const privateKeyString = '594ce39f93abf5494f3c324500dd318b39f5161df082387edf6a20d0ff90d960'
const privateKey = Buffer.from(privateKeyString, 'hex')
const privateKey2 = Buffer.from('9ecbafaecca5493c744ae471ffc96c6b639575aad0368dd801c073f4df1d084a', 'hex')
const provider = new ethers.JsonRpcProvider(_PROVIDER, 1287)
// const provider = new ethers.JsonRpcProvider(_PROVIDER)
const _CONTRACT = new ethers.Contract(_CONTRACT_ADDRESS, ABI, provider)
export const resolver = new Resolver(
getResolver({
name: 'alpha',
provider,
registry: _CONTRACT,
})
)
const gasLimit = 30000000
jest.setTimeout(100000)
describe('moonbeam-alpha contract', () => {
it('should create a new DID', async () => {
//Using the MoonDidController
const {
privKey: OriginalOwnerKey,
address: OwnerAddress,
pubKey: OriginalOwner,
} = await randomPrivatePublicKeys(_PROVIDER)
const identifier = `did:moon:alpha:${OwnerAddress}`
const signer = new ethers.Wallet(privateKeyString, provider)
const moonController = new MoonDidController(
identifier,
undefined,
signer,
undefined,
undefined,
undefined,
_CONTRACT_ADDRESS,
false
)
const hash = await moonController.createChangeOwnerHash(ETHER_ACC)
const signature = OriginalOwnerKey.sign(hash)
try {
const res = await moonController.changeOwnerSigned(ETHER_ACC, {
sigV: signature.v,
sigR: signature.r,
sigS: signature.s,
})
} catch (error) {
console.log(error)
}
//Using the Web3Raw
// const W3JSR = new web3jsRaw(_PROVIDER)
// await W3JSR.getWeb3(ABI, _CONTRACT_ADDRESS)
// const { privateKey: OriginalOwnerPrivateKey, address: OwnerAddress } = await W3JSR.createNewAccount()
// const OriginalOwnerKey = new ethers.SigningKey(OriginalOwnerPrivateKey)
// // let result = await W3JSR.ContractInstance.methods.identityOwner('0x35252b703078f9E9E96ffbC739372fE5eF6aebAF').call()
// // console.log(result)
// async function getPaddedNonceCompatibility(attribute = false): Promise<string> {
// let nonceKey
// if (true && attribute) {
// nonceKey = OwnerAddress
// } else {
// // @ts-ignore
// nonceKey = await W3JSR.ContractInstance.methods.identityOwner(getAddress(OwnerAddress)).call()
// }
// // @ts-ignore
// return zeroPadValue(toBeHex(await W3JSR.ContractInstance.methods.nonce(nonceKey).call()), 32)
// }
// async function createChangeOwnerHash(newOwner: address) {
// const paddedNonce = await getPaddedNonceCompatibility()
// const dataToHash = concat([
// MESSAGE_PREFIX,
// _CONTRACT_ADDRESS,
// paddedNonce,
// OwnerAddress,
// getBytes(concat([toUtf8Bytes('changeOwner'), newOwner])),
// ])
// return keccak256(dataToHash)
// }
// const hash = await createChangeOwnerHash(ETHER_ACC)
// const signature = OriginalOwnerKey.sign(hash)
// var functionName = 'changeOwnerSigned'
// var params = [OwnerAddress, signature.v, signature.r, signature.s, ETHER_ACC]
// try {
// const result = await W3JSR.prepareSignSend(
// ABI,
// _CONTRACT_ADDRESS,
// functionName,
// ETHER_ACC,
// privateKey,
// '0x00',
// params,
// gasLimit
// )
// console.log(result)
// } catch (error) {
// console.log(error)
// }
})
it('should add EcdsaSecp256k1VerificationKey2019 signing key signed', async () => {
const signer = new ethers.Wallet(privateKeyString, provider)
const publicKey = new ethers.SigningKey(privateKey).publicKey
const identifier = 'did:moon:alpha:0x02ac1f42b5a09ff8eb5de100c9e942a8d34fc4be053051b8117d2471870aae4609'
const moonController = new MoonDidController(
identifier,
undefined,
signer,
undefined,
undefined,
undefined,
_CONTRACT_ADDRESS,
false
)
const hash = await moonController.createSetAttributeHash('did/pub/Secp256k1/sigAuth', publicKey, 86400)
const signature = new ethers.SigningKey(privateKey2).sign(hash)
await moonController.setAttributeSigned('did/pub/Secp256k1/sigAuth', publicKey, 86400, {
sigV: signature.v,
sigR: signature.r,
sigS: signature.s,
})
})
it.only('Should resolve a did document', async () => {
const didDocument = await resolver.resolve('did:moon:alpha:0xf6f84c31730d468728fbb2bb3dc023a63afe17c5')
console.log(didDocument)
})
})