2022-09-05 23:57:11 +03:00
"use strict" ;
Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
exports . ContractFactory = void 0 ;
const index _js _1 = require ( "../abi/index.js" ) ;
const index _js _2 = require ( "../address/index.js" ) ;
const index _js _3 = require ( "../utils/index.js" ) ;
const contract _js _1 = require ( "./contract.js" ) ;
// A = Arguments to the constructor
// I = Interface of deployed contracts
class ContractFactory {
interface ;
bytecode ;
runner ;
constructor ( abi , bytecode , runner ) {
const iface = index _js _1 . Interface . from ( abi ) ;
// Dereference Solidity bytecode objects and allow a missing `0x`-prefix
if ( bytecode instanceof Uint8Array ) {
2022-09-16 05:58:45 +03:00
bytecode = ( 0 , index _js _3 . hexlify ) ( ( 0 , index _js _3 . getBytes ) ( bytecode ) ) ;
2022-09-05 23:57:11 +03:00
}
else {
if ( typeof ( bytecode ) === "object" ) {
bytecode = bytecode . object ;
}
2023-02-19 06:18:42 +03:00
if ( ! bytecode . startsWith ( "0x" ) ) {
2022-09-05 23:57:11 +03:00
bytecode = "0x" + bytecode ;
}
2022-09-16 05:58:45 +03:00
bytecode = ( 0 , index _js _3 . hexlify ) ( ( 0 , index _js _3 . getBytes ) ( bytecode ) ) ;
2022-09-05 23:57:11 +03:00
}
( 0 , index _js _3 . defineProperties ) ( this , {
bytecode , interface : iface , runner : ( runner || null )
} ) ;
}
async getDeployTransaction ( ... args ) {
let overrides = { } ;
const fragment = this . interface . deploy ;
if ( fragment . inputs . length + 1 === args . length ) {
overrides = await ( 0 , contract _js _1 . copyOverrides ) ( args . pop ( ) ) ;
}
if ( fragment . inputs . length !== args . length ) {
throw new Error ( "incorrect number of arguments to constructor" ) ;
}
const resolvedArgs = await ( 0 , contract _js _1 . resolveArgs ) ( this . runner , fragment . inputs , args ) ;
const data = ( 0 , index _js _3 . concat ) ( [ this . bytecode , this . interface . encodeDeploy ( resolvedArgs ) ] ) ;
return Object . assign ( { } , overrides , { data } ) ;
}
async deploy ( ... args ) {
const tx = await this . getDeployTransaction ( ... args ) ;
2022-11-09 10:57:02 +03:00
( 0 , index _js _3 . assert ) ( this . runner && typeof ( this . runner . sendTransaction ) === "function" , "factory runner does not support sending transactions" , "UNSUPPORTED_OPERATION" , {
operation : "sendTransaction"
} ) ;
2022-09-05 23:57:11 +03:00
const sentTx = await this . runner . sendTransaction ( tx ) ;
const address = ( 0 , index _js _2 . getCreateAddress ) ( sentTx ) ;
return new contract _js _1 . BaseContract ( address , this . interface , this . runner , sentTx ) ;
}
connect ( runner ) {
return new ContractFactory ( this . interface , this . bytecode , runner ) ;
}
static fromSolidity ( output , runner ) {
2022-11-09 10:57:02 +03:00
( 0 , index _js _3 . assertArgument ) ( output != null , "bad compiler output" , "output" , output ) ;
2022-09-05 23:57:11 +03:00
if ( typeof ( output ) === "string" ) {
output = JSON . parse ( output ) ;
}
const abi = output . abi ;
let bytecode = "" ;
if ( output . bytecode ) {
bytecode = output . bytecode ;
}
else if ( output . evm && output . evm . bytecode ) {
bytecode = output . evm . bytecode ;
}
return new this ( abi , bytecode , runner ) ;
}
}
exports . ContractFactory = ContractFactory ;
//# sourceMappingURL=factory.js.map