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 | 12x 12x 12x | /** pragma type transaction **/
import {
getEnvironment,
replaceImportAddresses,
reportMissingImports,
reportMissing,
sendTransaction
} from '@onflow/flow-cadut'
export const CODE = `
import FlowManager from 0x01
transaction(name:String, code: String, manager: Address ##ARGS-WITH-TYPES##) {
prepare(acct: AuthAccount){
let decoded = code.decodeHex()
if acct.contracts.get(name: name) == nil {
acct.contracts.add(name: name, code: decoded)
} else {
acct.contracts.update__experimental(name: name, code: decoded)
}
let linkPath = FlowManager.contractManagerPath
let contractManager = getAccount(manager)
.getCapability(linkPath)!
.borrow<&FlowManager.Mapper>()!
let address = acct.address
contractManager.setAddress(name, address: address)
}
}
`;
/**
* Method to generate cadence code for updateContract transaction
* @param {Object.<string, string>} addressMap - contract name as a key and address where it's deployed as value
*/
export const updateContractTemplate = async (addressMap = {}) => {
const envMap = await getEnvironment();
const fullMap = {
...envMap,
...addressMap,
};
// If there are any missing imports in fullMap it will be reported via console
reportMissingImports(CODE, fullMap, `updateContract =>`)
return replaceImportAddresses(CODE, fullMap);
};
/**
* Sends updateContract transaction to the network
* @param {Object.<string, string>} props.addressMap - contract name as a key and address where it's deployed as value
* @param Array<*> props.args - list of arguments
* @param Array<*> props.signers - list of signers
*/
export const updateContract = async (props = {}) => {
const { addressMap, args = [], signers = [] } = props;
const code = await updateContractTemplate(addressMap);
reportMissing("arguments", args.length, 3, `updateContract =>`);
reportMissing("signers", signers.length, 1, `updateContract =>`);
return sendTransaction({code, processed: true, ...props})
} |