Skip to content

@ecp.eth/sdk


@ecp.eth/sdk / channel-manager / createChannel

Variable: createChannel()

const createChannel: (...args) => Promise<WaitableWriteContractHelperResult<readonly [{
  inputs: readonly [{
     internalType: "address";
     name: "initialOwner";
     type: "address";
  }];
  stateMutability: "nonpayable";
  type: "constructor";
}, {
  stateMutability: "payable";
  type: "receive";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "to";
     type: "address";
   }, {
     internalType: "uint256";
     name: "tokenId";
     type: "uint256";
  }];
  name: "approve";
  outputs: readonly [];
  stateMutability: "nonpayable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "owner";
     type: "address";
  }];
  name: "balanceOf";
  outputs: readonly [{
     internalType: "uint256";
     name: "";
     type: "uint256";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "postFeeAmountForwardedToHook";
     type: "uint256";
  }];
  name: "calculateMsgValueWithHookFee";
  outputs: readonly [{
     internalType: "uint256";
     name: "";
     type: "uint256";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [];
  name: "cancelOwnershipHandover";
  outputs: readonly [];
  stateMutability: "payable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
  }];
  name: "channelExists";
  outputs: readonly [{
     internalType: "bool";
     name: "";
     type: "bool";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "";
     type: "uint256";
   }, {
     internalType: "bytes32";
     name: "";
     type: "bytes32";
  }];
  name: "channelMetadata";
  outputs: readonly [{
     internalType: "bytes";
     name: "";
     type: "bytes";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "";
     type: "uint256";
   }, {
     internalType: "uint256";
     name: "";
     type: "uint256";
  }];
  name: "channelMetadataKeys";
  outputs: readonly [{
     internalType: "bytes32";
     name: "";
     type: "bytes32";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [];
  name: "collectCommentCreationFee";
  outputs: readonly [{
     internalType: "uint96";
     name: "";
     type: "uint96";
  }];
  stateMutability: "payable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "pendingOwner";
     type: "address";
  }];
  name: "completeOwnershipHandover";
  outputs: readonly [];
  stateMutability: "payable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "string";
     name: "name";
     type: "string";
   }, {
     internalType: "string";
     name: "description";
     type: "string";
   }, {
     components: readonly [{
        internalType: "bytes32";
        name: "key";
        type: "bytes32";
      }, {
        internalType: "bytes";
        name: "value";
        type: "bytes";
     }];
     internalType: "struct Metadata.MetadataEntry[]";
     name: "metadata";
     type: "tuple[]";
   }, {
     internalType: "address";
     name: "hook";
     type: "address";
  }];
  name: "createChannel";
  outputs: readonly [{
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
  }];
  stateMutability: "payable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "value";
     type: "uint256";
  }];
  name: "deductProtocolHookTransactionFee";
  outputs: readonly [{
     internalType: "uint256";
     name: "hookValue";
     type: "uint256";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "tokenId";
     type: "uint256";
  }];
  name: "getApproved";
  outputs: readonly [{
     internalType: "address";
     name: "";
     type: "address";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
  }];
  name: "getChannel";
  outputs: readonly [{
     components: readonly [{
        internalType: "string";
        name: "name";
        type: "string";
      }, {
        internalType: "string";
        name: "description";
        type: "string";
      }, {
        internalType: "address";
        name: "hook";
        type: "address";
      }, {
        components: readonly [{
           internalType: ...;
           name: ...;
           type: ...;
         }, {
           internalType: ...;
           name: ...;
           type: ...;
         }, {
           internalType: ...;
           name: ...;
           type: ...;
         }, {
           internalType: ...;
           name: ...;
           type: ...;
         }, {
           internalType: ...;
           name: ...;
           type: ...;
         }, {
           internalType: ...;
           name: ...;
           type: ...;
        }];
        internalType: "struct Hooks.Permissions";
        name: "permissions";
        type: "tuple";
     }];
     internalType: "struct Channels.Channel";
     name: "";
     type: "tuple";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [];
  name: "getChannelCreationFee";
  outputs: readonly [{
     internalType: "uint96";
     name: "";
     type: "uint96";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
  }];
  name: "getChannelMetadata";
  outputs: readonly [{
     components: readonly [{
        internalType: "bytes32";
        name: "key";
        type: "bytes32";
      }, {
        internalType: "bytes";
        name: "value";
        type: "bytes";
     }];
     internalType: "struct Metadata.MetadataEntry[]";
     name: "";
     type: "tuple[]";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
  }];
  name: "getChannelMetadataKeys";
  outputs: readonly [{
     internalType: "bytes32[]";
     name: "";
     type: "bytes32[]";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
   }, {
     internalType: "bytes32";
     name: "key";
     type: "bytes32";
  }];
  name: "getChannelMetadataValue";
  outputs: readonly [{
     internalType: "bytes";
     name: "";
     type: "bytes";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [];
  name: "getCommentCreationFee";
  outputs: readonly [{
     internalType: "uint96";
     name: "";
     type: "uint96";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [];
  name: "getHookTransactionFee";
  outputs: readonly [{
     internalType: "uint16";
     name: "";
     type: "uint16";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "owner";
     type: "address";
   }, {
     internalType: "address";
     name: "operator";
     type: "address";
  }];
  name: "isApprovedForAll";
  outputs: readonly [{
     internalType: "bool";
     name: "";
     type: "bool";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [];
  name: "name";
  outputs: readonly [{
     internalType: "string";
     name: "";
     type: "string";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [];
  name: "owner";
  outputs: readonly [{
     internalType: "address";
     name: "result";
     type: "address";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "tokenId";
     type: "uint256";
  }];
  name: "ownerOf";
  outputs: readonly [{
     internalType: "address";
     name: "";
     type: "address";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "pendingOwner";
     type: "address";
  }];
  name: "ownershipHandoverExpiresAt";
  outputs: readonly [{
     internalType: "uint256";
     name: "result";
     type: "uint256";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [];
  name: "renounceOwnership";
  outputs: readonly [];
  stateMutability: "payable";
  type: "function";
}, {
  inputs: readonly [];
  name: "requestOwnershipHandover";
  outputs: readonly [];
  stateMutability: "payable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "from";
     type: "address";
   }, {
     internalType: "address";
     name: "to";
     type: "address";
   }, {
     internalType: "uint256";
     name: "tokenId";
     type: "uint256";
  }];
  name: "safeTransferFrom";
  outputs: readonly [];
  stateMutability: "nonpayable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "from";
     type: "address";
   }, {
     internalType: "address";
     name: "to";
     type: "address";
   }, {
     internalType: "uint256";
     name: "tokenId";
     type: "uint256";
   }, {
     internalType: "bytes";
     name: "data";
     type: "bytes";
  }];
  name: "safeTransferFrom";
  outputs: readonly [];
  stateMutability: "nonpayable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "operator";
     type: "address";
   }, {
     internalType: "bool";
     name: "approved";
     type: "bool";
  }];
  name: "setApprovalForAll";
  outputs: readonly [];
  stateMutability: "nonpayable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "string";
     name: "baseURI_";
     type: "string";
  }];
  name: "setBaseURI";
  outputs: readonly [];
  stateMutability: "nonpayable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint96";
     name: "fee";
     type: "uint96";
  }];
  name: "setChannelCreationFee";
  outputs: readonly [];
  stateMutability: "nonpayable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint96";
     name: "fee";
     type: "uint96";
  }];
  name: "setCommentCreationFee";
  outputs: readonly [];
  stateMutability: "nonpayable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
   }, {
     internalType: "address";
     name: "hook";
     type: "address";
  }];
  name: "setHook";
  outputs: readonly [];
  stateMutability: "nonpayable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint16";
     name: "feeBasisPoints";
     type: "uint16";
  }];
  name: "setHookTransactionFee";
  outputs: readonly [];
  stateMutability: "nonpayable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "bytes4";
     name: "interfaceId";
     type: "bytes4";
  }];
  name: "supportsInterface";
  outputs: readonly [{
     internalType: "bool";
     name: "";
     type: "bool";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [];
  name: "symbol";
  outputs: readonly [{
     internalType: "string";
     name: "";
     type: "string";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "index";
     type: "uint256";
  }];
  name: "tokenByIndex";
  outputs: readonly [{
     internalType: "uint256";
     name: "";
     type: "uint256";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "owner";
     type: "address";
   }, {
     internalType: "uint256";
     name: "index";
     type: "uint256";
  }];
  name: "tokenOfOwnerByIndex";
  outputs: readonly [{
     internalType: "uint256";
     name: "";
     type: "uint256";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "tokenId";
     type: "uint256";
  }];
  name: "tokenURI";
  outputs: readonly [{
     internalType: "string";
     name: "";
     type: "string";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [];
  name: "totalSupply";
  outputs: readonly [{
     internalType: "uint256";
     name: "";
     type: "uint256";
  }];
  stateMutability: "view";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "from";
     type: "address";
   }, {
     internalType: "address";
     name: "to";
     type: "address";
   }, {
     internalType: "uint256";
     name: "tokenId";
     type: "uint256";
  }];
  name: "transferFrom";
  outputs: readonly [];
  stateMutability: "nonpayable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "newOwner";
     type: "address";
  }];
  name: "transferOwnership";
  outputs: readonly [];
  stateMutability: "payable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
   }, {
     internalType: "string";
     name: "name";
     type: "string";
   }, {
     internalType: "string";
     name: "description";
     type: "string";
   }, {
     components: readonly [{
        internalType: "enum Metadata.MetadataOperation";
        name: "operation";
        type: "uint8";
      }, {
        internalType: "bytes32";
        name: "key";
        type: "bytes32";
      }, {
        internalType: "bytes";
        name: "value";
        type: "bytes";
     }];
     internalType: "struct Metadata.MetadataEntryOp[]";
     name: "metadataOperations";
     type: "tuple[]";
  }];
  name: "updateChannel";
  outputs: readonly [];
  stateMutability: "nonpayable";
  type: "function";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "recipient";
     type: "address";
  }];
  name: "withdrawFees";
  outputs: readonly [{
     internalType: "uint256";
     name: "amount";
     type: "uint256";
  }];
  stateMutability: "nonpayable";
  type: "function";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: true;
     internalType: "address";
     name: "owner";
     type: "address";
   }, {
     indexed: true;
     internalType: "address";
     name: "approved";
     type: "address";
   }, {
     indexed: true;
     internalType: "uint256";
     name: "tokenId";
     type: "uint256";
  }];
  name: "Approval";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: true;
     internalType: "address";
     name: "owner";
     type: "address";
   }, {
     indexed: true;
     internalType: "address";
     name: "operator";
     type: "address";
   }, {
     indexed: false;
     internalType: "bool";
     name: "approved";
     type: "bool";
  }];
  name: "ApprovalForAll";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: false;
     internalType: "string";
     name: "baseURI";
     type: "string";
  }];
  name: "BaseURIUpdated";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: true;
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
   }, {
     indexed: false;
     internalType: "string";
     name: "name";
     type: "string";
   }, {
     indexed: false;
     internalType: "string";
     name: "description";
     type: "string";
   }, {
     components: readonly [{
        internalType: "bytes32";
        name: "key";
        type: "bytes32";
      }, {
        internalType: "bytes";
        name: "value";
        type: "bytes";
     }];
     indexed: false;
     internalType: "struct Metadata.MetadataEntry[]";
     name: "metadata";
     type: "tuple[]";
   }, {
     indexed: false;
     internalType: "address";
     name: "hook";
     type: "address";
   }, {
     indexed: false;
     internalType: "address";
     name: "owner";
     type: "address";
  }];
  name: "ChannelCreated";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: false;
     internalType: "uint96";
     name: "newFee";
     type: "uint96";
  }];
  name: "ChannelCreationFeeUpdated";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: true;
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
   }, {
     indexed: true;
     internalType: "bytes32";
     name: "key";
     type: "bytes32";
   }, {
     indexed: false;
     internalType: "bytes";
     name: "value";
     type: "bytes";
  }];
  name: "ChannelMetadataSet";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: true;
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
   }, {
     indexed: false;
     internalType: "string";
     name: "name";
     type: "string";
   }, {
     indexed: false;
     internalType: "string";
     name: "description";
     type: "string";
   }, {
     components: readonly [{
        internalType: "bytes32";
        name: "key";
        type: "bytes32";
      }, {
        internalType: "bytes";
        name: "value";
        type: "bytes";
     }];
     indexed: false;
     internalType: "struct Metadata.MetadataEntry[]";
     name: "metadata";
     type: "tuple[]";
  }];
  name: "ChannelUpdated";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: false;
     internalType: "uint96";
     name: "newFee";
     type: "uint96";
  }];
  name: "CommentCreationFeeUpdated";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: true;
     internalType: "address";
     name: "recipient";
     type: "address";
   }, {
     indexed: false;
     internalType: "uint256";
     name: "amount";
     type: "uint256";
  }];
  name: "FeesWithdrawn";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: true;
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
   }, {
     indexed: true;
     internalType: "address";
     name: "hook";
     type: "address";
  }];
  name: "HookSet";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: true;
     internalType: "uint256";
     name: "channelId";
     type: "uint256";
   }, {
     indexed: true;
     internalType: "address";
     name: "hook";
     type: "address";
   }, {
     indexed: false;
     internalType: "bool";
     name: "enabled";
     type: "bool";
  }];
  name: "HookStatusUpdated";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: false;
     internalType: "uint16";
     name: "newBasisPoints";
     type: "uint16";
  }];
  name: "HookTransactionFeeUpdated";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: true;
     internalType: "address";
     name: "pendingOwner";
     type: "address";
  }];
  name: "OwnershipHandoverCanceled";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: true;
     internalType: "address";
     name: "pendingOwner";
     type: "address";
  }];
  name: "OwnershipHandoverRequested";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: true;
     internalType: "address";
     name: "oldOwner";
     type: "address";
   }, {
     indexed: true;
     internalType: "address";
     name: "newOwner";
     type: "address";
  }];
  name: "OwnershipTransferred";
  type: "event";
}, {
  anonymous: false;
  inputs: readonly [{
     indexed: true;
     internalType: "address";
     name: "from";
     type: "address";
   }, {
     indexed: true;
     internalType: "address";
     name: "to";
     type: "address";
   }, {
     indexed: true;
     internalType: "uint256";
     name: "tokenId";
     type: "uint256";
  }];
  name: "Transfer";
  type: "event";
}, {
  inputs: readonly [];
  name: "AlreadyInitialized";
  type: "error";
}, {
  inputs: readonly [];
  name: "ChannelAlreadyExists";
  type: "error";
}, {
  inputs: readonly [];
  name: "ChannelDoesNotExist";
  type: "error";
}, {
  inputs: readonly [];
  name: "ERC721EnumerableForbiddenBatchMint";
  type: "error";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "sender";
     type: "address";
   }, {
     internalType: "uint256";
     name: "tokenId";
     type: "uint256";
   }, {
     internalType: "address";
     name: "owner";
     type: "address";
  }];
  name: "ERC721IncorrectOwner";
  type: "error";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "operator";
     type: "address";
   }, {
     internalType: "uint256";
     name: "tokenId";
     type: "uint256";
  }];
  name: "ERC721InsufficientApproval";
  type: "error";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "approver";
     type: "address";
  }];
  name: "ERC721InvalidApprover";
  type: "error";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "operator";
     type: "address";
  }];
  name: "ERC721InvalidOperator";
  type: "error";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "owner";
     type: "address";
  }];
  name: "ERC721InvalidOwner";
  type: "error";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "receiver";
     type: "address";
  }];
  name: "ERC721InvalidReceiver";
  type: "error";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "sender";
     type: "address";
  }];
  name: "ERC721InvalidSender";
  type: "error";
}, {
  inputs: readonly [{
     internalType: "uint256";
     name: "tokenId";
     type: "uint256";
  }];
  name: "ERC721NonexistentToken";
  type: "error";
}, {
  inputs: readonly [{
     internalType: "address";
     name: "owner";
     type: "address";
   }, {
     internalType: "uint256";
     name: "index";
     type: "uint256";
  }];
  name: "ERC721OutOfBoundsIndex";
  type: "error";
}, {
  inputs: readonly [];
  name: "EmptyChannelName";
  type: "error";
}, {
  inputs: readonly [];
  name: "HookAlreadySet";
  type: "error";
}, {
  inputs: readonly [];
  name: "InsufficientFee";
  type: "error";
}, {
  inputs: readonly [];
  name: "InvalidBaseURI";
  type: "error";
}, {
  inputs: readonly [];
  name: "InvalidFee";
  type: "error";
}, {
  inputs: readonly [];
  name: "InvalidHookInterface";
  type: "error";
}, {
  inputs: readonly [];
  name: "InvalidKey";
  type: "error";
}, {
  inputs: readonly [];
  name: "NewOwnerIsZeroAddress";
  type: "error";
}, {
  inputs: readonly [];
  name: "NoHandoverRequest";
  type: "error";
}, {
  inputs: readonly [];
  name: "Reentrancy";
  type: "error";
}, {
  inputs: readonly [];
  name: "Unauthorized";
  type: "error";
}, {
  inputs: readonly [];
  name: "UnauthorizedCaller";
  type: "error";
}, {
  inputs: readonly [];
  name: "ZeroAddress";
  type: "error";
}], "ChannelCreated">>;

Defined in: packages/sdk/src/channel-manager/channel.ts:72

Create a new channel

Parameters

args

...[CreateChannelParams]

Returns

Promise<WaitableWriteContractHelperResult<readonly [{ inputs: readonly [{ internalType: "address"; name: "initialOwner"; type: "address"; }]; stateMutability: "nonpayable"; type: "constructor"; }, { stateMutability: "payable"; type: "receive"; }, { inputs: readonly [{ internalType: "address"; name: "to"; type: "address"; }, { internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "approve"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "owner"; type: "address"; }]; name: "balanceOf"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "postFeeAmountForwardedToHook"; type: "uint256"; }]; name: "calculateMsgValueWithHookFee"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "cancelOwnershipHandover"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }]; name: "channelExists"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }, { internalType: "bytes32"; name: ""; type: "bytes32"; }]; name: "channelMetadata"; outputs: readonly [{ internalType: "bytes"; name: ""; type: "bytes"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }, { internalType: "uint256"; name: ""; type: "uint256"; }]; name: "channelMetadataKeys"; outputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "collectCommentCreationFee"; outputs: readonly [{ internalType: "uint96"; name: ""; type: "uint96"; }]; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "pendingOwner"; type: "address"; }]; name: "completeOwnershipHandover"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "string"; name: "name"; type: "string"; }, { internalType: "string"; name: "description"; type: "string"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }, { internalType: "address"; name: "hook"; type: "address"; }]; name: "createChannel"; outputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }]; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "value"; type: "uint256"; }]; name: "deductProtocolHookTransactionFee"; outputs: readonly [{ internalType: "uint256"; name: "hookValue"; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "getApproved"; outputs: readonly [{ internalType: "address"; name: ""; type: "address"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }]; name: "getChannel"; outputs: readonly [{ components: readonly [{ internalType: "string"; name: "name"; type: "string"; }, { internalType: "string"; name: "description"; type: "string"; }, { internalType: "address"; name: "hook"; type: "address"; }, { components: readonly [{ internalType: ...; name: ...; type: ...; }, { internalType: ...; name: ...; type: ...; }, { internalType: ...; name: ...; type: ...; }, { internalType: ...; name: ...; type: ...; }, { internalType: ...; name: ...; type: ...; }, { internalType: ...; name: ...; type: ...; }]; internalType: "struct Hooks.Permissions"; name: "permissions"; type: "tuple"; }]; internalType: "struct Channels.Channel"; name: ""; type: "tuple"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "getChannelCreationFee"; outputs: readonly [{ internalType: "uint96"; name: ""; type: "uint96"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }]; name: "getChannelMetadata"; outputs: readonly [{ components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: ""; type: "tuple[]"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }]; name: "getChannelMetadataKeys"; outputs: readonly [{ internalType: "bytes32[]"; name: ""; type: "bytes32[]"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }, { internalType: "bytes32"; name: "key"; type: "bytes32"; }]; name: "getChannelMetadataValue"; outputs: readonly [{ internalType: "bytes"; name: ""; type: "bytes"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "getCommentCreationFee"; outputs: readonly [{ internalType: "uint96"; name: ""; type: "uint96"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "getHookTransactionFee"; outputs: readonly [{ internalType: "uint16"; name: ""; type: "uint16"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "owner"; type: "address"; }, { internalType: "address"; name: "operator"; type: "address"; }]; name: "isApprovedForAll"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "name"; outputs: readonly [{ internalType: "string"; name: ""; type: "string"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "owner"; outputs: readonly [{ internalType: "address"; name: "result"; type: "address"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "ownerOf"; outputs: readonly [{ internalType: "address"; name: ""; type: "address"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "pendingOwner"; type: "address"; }]; name: "ownershipHandoverExpiresAt"; outputs: readonly [{ internalType: "uint256"; name: "result"; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "renounceOwnership"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly []; name: "requestOwnershipHandover"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "from"; type: "address"; }, { internalType: "address"; name: "to"; type: "address"; }, { internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "safeTransferFrom"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "from"; type: "address"; }, { internalType: "address"; name: "to"; type: "address"; }, { internalType: "uint256"; name: "tokenId"; type: "uint256"; }, { internalType: "bytes"; name: "data"; type: "bytes"; }]; name: "safeTransferFrom"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "operator"; type: "address"; }, { internalType: "bool"; name: "approved"; type: "bool"; }]; name: "setApprovalForAll"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "string"; name: "baseURI_"; type: "string"; }]; name: "setBaseURI"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "uint96"; name: "fee"; type: "uint96"; }]; name: "setChannelCreationFee"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "uint96"; name: "fee"; type: "uint96"; }]; name: "setCommentCreationFee"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }, { internalType: "address"; name: "hook"; type: "address"; }]; name: "setHook"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "uint16"; name: "feeBasisPoints"; type: "uint16"; }]; name: "setHookTransactionFee"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "bytes4"; name: "interfaceId"; type: "bytes4"; }]; name: "supportsInterface"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "symbol"; outputs: readonly [{ internalType: "string"; name: ""; type: "string"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "index"; type: "uint256"; }]; name: "tokenByIndex"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "owner"; type: "address"; }, { internalType: "uint256"; name: "index"; type: "uint256"; }]; name: "tokenOfOwnerByIndex"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "tokenURI"; outputs: readonly [{ internalType: "string"; name: ""; type: "string"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "totalSupply"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "from"; type: "address"; }, { internalType: "address"; name: "to"; type: "address"; }, { internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "transferFrom"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "newOwner"; type: "address"; }]; name: "transferOwnership"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }, { internalType: "string"; name: "name"; type: "string"; }, { internalType: "string"; name: "description"; type: "string"; }, { components: readonly [{ internalType: "enum Metadata.MetadataOperation"; name: "operation"; type: "uint8"; }, { internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntryOp[]"; name: "metadataOperations"; type: "tuple[]"; }]; name: "updateChannel"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "recipient"; type: "address"; }]; name: "withdrawFees"; outputs: readonly [{ internalType: "uint256"; name: "amount"; type: "uint256"; }]; stateMutability: "nonpayable"; type: "function"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "owner"; type: "address"; }, { indexed: true; internalType: "address"; name: "approved"; type: "address"; }, { indexed: true; internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "Approval"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "owner"; type: "address"; }, { indexed: true; internalType: "address"; name: "operator"; type: "address"; }, { indexed: false; internalType: "bool"; name: "approved"; type: "bool"; }]; name: "ApprovalForAll"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: false; internalType: "string"; name: "baseURI"; type: "string"; }]; name: "BaseURIUpdated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "uint256"; name: "channelId"; type: "uint256"; }, { indexed: false; internalType: "string"; name: "name"; type: "string"; }, { indexed: false; internalType: "string"; name: "description"; type: "string"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; indexed: false; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }, { indexed: false; internalType: "address"; name: "hook"; type: "address"; }, { indexed: false; internalType: "address"; name: "owner"; type: "address"; }]; name: "ChannelCreated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: false; internalType: "uint96"; name: "newFee"; type: "uint96"; }]; name: "ChannelCreationFeeUpdated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "uint256"; name: "channelId"; type: "uint256"; }, { indexed: true; internalType: "bytes32"; name: "key"; type: "bytes32"; }, { indexed: false; internalType: "bytes"; name: "value"; type: "bytes"; }]; name: "ChannelMetadataSet"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "uint256"; name: "channelId"; type: "uint256"; }, { indexed: false; internalType: "string"; name: "name"; type: "string"; }, { indexed: false; internalType: "string"; name: "description"; type: "string"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; indexed: false; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }]; name: "ChannelUpdated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: false; internalType: "uint96"; name: "newFee"; type: "uint96"; }]; name: "CommentCreationFeeUpdated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "recipient"; type: "address"; }, { indexed: false; internalType: "uint256"; name: "amount"; type: "uint256"; }]; name: "FeesWithdrawn"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "uint256"; name: "channelId"; type: "uint256"; }, { indexed: true; internalType: "address"; name: "hook"; type: "address"; }]; name: "HookSet"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "uint256"; name: "channelId"; type: "uint256"; }, { indexed: true; internalType: "address"; name: "hook"; type: "address"; }, { indexed: false; internalType: "bool"; name: "enabled"; type: "bool"; }]; name: "HookStatusUpdated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: false; internalType: "uint16"; name: "newBasisPoints"; type: "uint16"; }]; name: "HookTransactionFeeUpdated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "pendingOwner"; type: "address"; }]; name: "OwnershipHandoverCanceled"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "pendingOwner"; type: "address"; }]; name: "OwnershipHandoverRequested"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "oldOwner"; type: "address"; }, { indexed: true; internalType: "address"; name: "newOwner"; type: "address"; }]; name: "OwnershipTransferred"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "from"; type: "address"; }, { indexed: true; internalType: "address"; name: "to"; type: "address"; }, { indexed: true; internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "Transfer"; type: "event"; }, { inputs: readonly []; name: "AlreadyInitialized"; type: "error"; }, { inputs: readonly []; name: "ChannelAlreadyExists"; type: "error"; }, { inputs: readonly []; name: "ChannelDoesNotExist"; type: "error"; }, { inputs: readonly []; name: "ERC721EnumerableForbiddenBatchMint"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "sender"; type: "address"; }, { internalType: "uint256"; name: "tokenId"; type: "uint256"; }, { internalType: "address"; name: "owner"; type: "address"; }]; name: "ERC721IncorrectOwner"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "operator"; type: "address"; }, { internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "ERC721InsufficientApproval"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "approver"; type: "address"; }]; name: "ERC721InvalidApprover"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "operator"; type: "address"; }]; name: "ERC721InvalidOperator"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "owner"; type: "address"; }]; name: "ERC721InvalidOwner"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "receiver"; type: "address"; }]; name: "ERC721InvalidReceiver"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "sender"; type: "address"; }]; name: "ERC721InvalidSender"; type: "error"; }, { inputs: readonly [{ internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "ERC721NonexistentToken"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "owner"; type: "address"; }, { internalType: "uint256"; name: "index"; type: "uint256"; }]; name: "ERC721OutOfBoundsIndex"; type: "error"; }, { inputs: readonly []; name: "EmptyChannelName"; type: "error"; }, { inputs: readonly []; name: "HookAlreadySet"; type: "error"; }, { inputs: readonly []; name: "InsufficientFee"; type: "error"; }, { inputs: readonly []; name: "InvalidBaseURI"; type: "error"; }, { inputs: readonly []; name: "InvalidFee"; type: "error"; }, { inputs: readonly []; name: "InvalidHookInterface"; type: "error"; }, { inputs: readonly []; name: "InvalidKey"; type: "error"; }, { inputs: readonly []; name: "NewOwnerIsZeroAddress"; type: "error"; }, { inputs: readonly []; name: "NoHandoverRequest"; type: "error"; }, { inputs: readonly []; name: "Reentrancy"; type: "error"; }, { inputs: readonly []; name: "Unauthorized"; type: "error"; }, { inputs: readonly []; name: "UnauthorizedCaller"; type: "error"; }, { inputs: readonly []; name: "ZeroAddress"; type: "error"; }], "ChannelCreated">>

The transaction hash of the created channel