All files / src manager.js

100% Statements 30/30
100% Branches 4/4
100% Functions 6/6
100% Lines 30/30

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 99 100 101 102 103                                              12x 65x         12x 220x   220x       220x   220x       220x 65x     220x                                             12x 6x 6x 6x     12x 3x   3x 3x 3x   3x     12x 6x 6x 6x     12x 3x   3x 3x     3x   3x    
/*
 * 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 registry from "./generated"
import {getServiceAddress} from "./utils"
import {authorization} from "./crypto"
 
export const initManager = async () => {
  await registry.contracts.deployFlowManager({
    to: await authorization(),
  })
}
 
export const getManagerAddress = async () => {
  const serviceAddress = await getServiceAddress()
 
  const addressMap = {
    FlowManager: serviceAddress,
  }
 
  const code = await registry.scripts.checkManagerTemplate(addressMap)
 
  let [result, e] = await executeScript({
    code,
    service: true,
  })
  if (e && result === null) {
    await initManager()
  }
 
  return getServiceAddress()
}
 
// TODO: replace method above after Cadence will allow to get contracts list on PublicAccount
/*
export const getManagerAddress = async () => {
  const serviceAddress = await getServiceAddress();
 
  const code = `
    access(all) fun main(address: Address):Bool {
      return getAccount(address).contracts.get("FlowManager") != null
    }
  `;
  const result = await executeScript({ code, args: [serviceAddress] });
 
  if (!result) {
    await initManager();
  }
 
  return serviceAddress;
};
 */
 
export const getBlockOffset = async () => {
  const FlowManager = await getManagerAddress()
  const code = await registry.scripts.getBlockOffsetTemplate({FlowManager})
  return executeScript({code})
}
 
export const setBlockOffset = async offset => {
  const FlowManager = await getManagerAddress()
 
  const args = [offset]
  const code = await registry.transactions.setBlockOffsetTemplate({FlowManager})
  const payer = [FlowManager]
 
  return sendTransaction({code, args, payer})
}
 
export const getTimestampOffset = async () => {
  const FlowManager = await getManagerAddress()
  const code = await registry.scripts.getTimestampOffsetTemplate({FlowManager})
  return executeScript({code})
}
 
export const setTimestampOffset = async offset => {
  const FlowManager = await getManagerAddress()
 
  const args = [offset]
  const code = await registry.transactions.setTimestampOffsetTemplate({
    FlowManager,
  })
  const payer = [FlowManager]
 
  return sendTransaction({code, args, payer})
}