Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Factory

Utilities for deploying Gatekeeper1155 contracts via the factory pattern.

import { Factory } from '@sceneinfrastructure/sdk'

Functions

prepareDeploy

Prepares a factory deploy transaction with optional setup calls.

import {
  Factory,
  gatekeeper1155FactoryAddress,
  gatekeeper1155Address,
} from '@sceneinfrastructure/sdk'
 
const chainId = 8453 // Base
const walletAddress = '0x3456789012345678901234567890123456789012'
 
// With raw calldata (default)
const { to, data, salt, predictedAddress } = Factory.prepareDeploy({
  factory: gatekeeper1155FactoryAddress[chainId],
  implementation: gatekeeper1155Address[chainId],
  nonce: BigInt(Date.now()),
  creator: walletAddress,
  owner: walletAddress,
  contractURI: 'ipfs://...',
})
 
// With viem args
const result = Factory.prepareDeploy({
  factory: gatekeeper1155FactoryAddress[chainId],
  implementation: gatekeeper1155Address[chainId],
  nonce: BigInt(Date.now()),
  creator: walletAddress,
  owner: walletAddress,
  contractURI: 'ipfs://...',
  as: 'args',
})

Parameters

ParameterTypeDescription
factoryAddressFactory contract address
implementationAddressImplementation contract address
noncebigintDeployment nonce (typically timestamp)
creatorAddressAddress calling deploy
ownerAddressOwner of deployed contract
contractURIstringContract metadata URI
callsHex[]Optional setup calls
as'data' | 'args'Output format (default: 'data')

Returns

FieldTypeDescription
toAddressFactory address
dataHexEncoded calldata (when as: 'data')
argstupleFunction args (when as: 'args')
saltHexCREATE2 salt
predictedAddressAddressPredicted deployment address

generateSalt

Generates the CREATE2 salt from deployment parameters.

import { Factory } from '@sceneinfrastructure/sdk'
 
const creatorAddress = '0x3456789012345678901234567890123456789012'
 
const salt = Factory.generateSalt({
  nonce: BigInt(Date.now()),
  creator: creatorAddress,
  contractURI: 'ipfs://...',
})

Parameters

ParameterTypeDescription
noncebigintDeployment nonce
creatorAddressCreator address
contractURIstringContract metadata URI

Returns

Hex - The keccak256 hash (bytes32)


predictAddress

Predicts the deployment address using CREATE2.

import {
  Factory,
  gatekeeper1155FactoryAddress,
  gatekeeper1155Address,
} from '@sceneinfrastructure/sdk'
 
const chainId = 8453 // Base
const creatorAddress = '0x3456789012345678901234567890123456789012' 
 
const salt = Factory.generateSalt({
  nonce: 1n,
  creator: creatorAddress,
  contractURI: 'ipfs://...',
})
 
const address = Factory.predictAddress({
  factory: gatekeeper1155FactoryAddress[chainId],
  implementation: gatekeeper1155Address[chainId],
  salt,
})

Parameters

ParameterTypeDescription
factoryAddressFactory contract address
implementationAddressImplementation address
saltHexCREATE2 salt

Returns

Address - The predicted contract address


encodeGrantRoles

Encodes a grantRoles call for contract initialization.

import { Factory, MINTER_ROLE, ADMIN_ROLE, gatekeeperAddress } from '@sceneinfrastructure/sdk'
 
const chainId = 8453 // Base
 
// Single role (e.g., grant minter to Gatekeeper)
const data = Factory.encodeGrantRoles({
  user: gatekeeperAddress[chainId],
  roles: MINTER_ROLE,
})
 
// Multiple roles (bitwise OR)
const multiData = Factory.encodeGrantRoles({
  user: '0x2345678901234567890123456789012345678901',
  roles: ADMIN_ROLE | MINTER_ROLE,
})

Parameters

ParameterTypeDescription
userAddressAddress to grant roles to
rolesbigintRole bitmap

Returns

Hex - Encoded function calldata


encodeSetupNewTier

Encodes a setupNewTier call for creating token tiers.

import { Factory } from '@sceneinfrastructure/sdk'
 
const data = Factory.encodeSetupNewTier({
  tokenURI: 'ipfs://QmToken...',
  stubURI: 'ipfs://QmStub...',
  maxSupply: 1000n, // 0n for unlimited
})

Parameters

ParameterTypeDescription
tokenURIstringToken metadata URI
stubURIstringStub metadata URI
maxSupplybigintMax supply (0 = unlimited)

Returns

Hex - Encoded function calldata


encodeCallGatekeeper

Encodes a callGatekeeper call for executing Gatekeeper operations.

import { Factory, Gatekeeper, gatekeeperAddress } from '@sceneinfrastructure/sdk'
 
const chainId = 8453 // Base
 
const saleKey = {
  token: '0x2345678901234567890123456789012345678901', // Your deployed contract
  vendorFeeBps: 0,
  referralFeeBps: 0,
  salesTaxBps: 0,
  vendor: '0x3456789012345678901234567890123456789012',
  nonce: 1n,
  currency: '0x1111111111111111111111111111111111111111',
  fundsRecipient: '0x4567890123456789012345678901234567890123',
  tokenId: 1n,
} as const
 
const innerCall = Gatekeeper.encodeRegisterSale({
  saleKey,
  saleState: {
    startTime: 1n,
    endTime: 9999999999n,
    quantity: 100,
    price: 1000000n,
    approvers: [],
  },
})
 
const data = Factory.encodeCallGatekeeper({
  gatekeeper: gatekeeperAddress[chainId],
  data: innerCall,
})

Parameters

ParameterTypeDescription
gatekeeperAddressGatekeeper contract address
dataHexEncoded Gatekeeper call

Returns

Hex - Encoded function calldata

Errors

InvalidDeployOptionsError

Thrown when deploy options are invalid.

import { Factory } from '@sceneinfrastructure/sdk'
 
try {
  // ...
} catch (error) {
  if (error instanceof Factory.InvalidDeployOptionsError) {
    console.error('Invalid options:', error.message)
  }
}