Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 | 45x 33x 45x 45x 45x 45x 45x 45x 45x 45x 45x 675x 45x 45x 11x 38x 38x 38x 38x 38x 38x 38x 38x 30x 38x | /*
* Flow JS Testing
*
* Copyright 2020-2021 Dapper Labs, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {executeScript, sendTransaction} from "./interaction"
import {getManagerAddress} from "./manager"
import registry from "./generated"
import {config} from "@onflow/fcl"
import {pubFlowKey} from "./crypto"
import {isObject} from "./utils"
export async function createAccount({name, keys}) {
if (!keys) {
keys = [
{
privateKey: await config().get("PRIVATE_KEY"),
},
]
}
// If public key is encoded already, don't change
// If provided as KeyObject (private key) generate public key
// TODO since old key API is deprecated, might want to pass the key in a different way (struct?)
keys = await Promise.all(
keys.map(key => (isObject(key) ? pubFlowKey(key) : key))
)
const managerAddress = await getManagerAddress()
const addressMap = {
FlowManager: managerAddress,
}
const code = await registry.transactions.createAccountTemplate(addressMap)
const args = [name, keys, managerAddress]
const [result, error] = await sendTransaction({
code,
args,
})
Iif (error) throw error
const {events} = result
const event = events.find(event => event.type.includes("AccountAdded"))
const address = event?.data?.address
return address
}
/**
* Returns address of account specified by name. If account with that name doesn't exist it will be created
* and assigned provided name as alias
* @param {string} accountName - name of the account
* @returns {Promise<string|*>}
*/
export const getAccountAddress = async accountName => {
const name =
accountName ||
`deployment-account-${(Math.random() * Math.pow(10, 8)).toFixed(0)}`
const managerAddress = await getManagerAddress()
const addressMap = {
FlowManager: managerAddress,
}
let accountAddress
const code = await registry.scripts.getAccountAddressTemplate(addressMap)
const args = [name, managerAddress]
const [result] = await executeScript({
code,
args,
service: true,
})
accountAddress = result
if (accountAddress === null) {
accountAddress = await createAccount({name})
}
return accountAddress
}
|