组件和链交互的规范讨论,欢迎大家来提想法 #54
Replies: 4 comments 4 replies
-
看了下代码,还提供了provider,这个定位是类似rainbow吗?看起来不是一个纯组件库。 |
Beta Was this translation helpful? Give feedback.
-
结合之前在 #11 这里的讨论,我重新梳理了一下一些关键想法:
从这个思路上来看,用户在使用的时候可以有如下的使用方式: 方式一,仅仅作为 UI 来使用: export default () => {
return (
<ConnectButton accounts={[...]} chains={[...]} onClick={() => {}} />
);
} 方式二,可以通过 export default () => {
return (
<Web3ConfigProvider accounts={[]} provider={{
requestAccount: () => { ... }
}}>
<ConnectButton />
</Web3ConfigProvider>
);
} 方式三,可以用封装好的实现: import { Web3Provider } from '@ant-design/web3-ethereum'; // 官方实现以太坊的适配,未来可能会有其它链的实现。
export default () => {
return (
<Web3Provider {/*这里的配置不同的链不一样*/}>
<ConnectButton />
</Web3Provider>
);
} 这个是基本的思路,大家可以看看有没有什么想法。 |
Beta Was this translation helpful? Give feedback.
-
关于 其中 ConfigConsumerProps 是组件中 Context 的类型,现在是这样的: export interface ConfigConsumerProps {
provider?: UniversalWeb3ProviderInterface;
accounts?: Account[];
} 想了一下,应该还要加上当前连接的链,可用的钱包等信息: export interface ConfigConsumerProps {
provider?: UniversalWeb3ProviderInterface;
accounts?: Account[];
wallets?: Wallet[];
chains?: Chains[];
} 这样 ConnectModel 就可以直接从 context 里面拿到 wallets 的信息了,不过组件应该优先用自己的 props 里面的。
export interface UniversalWeb3ProviderInterface {
getAccounts: () => Promise<Account[]>;
getCurrentAccount: () => Promise<Account | undefined>;
getCurrentNetwork: () => Promise<number>;
requestAccounts: (wallet?: string) => Promise<Account[]>;
getQrCodeLink: () => Promise<string>;
getNFTMetadata: (address: string, id: number) => Promise<NFTMetadata>;
getAvaliableWallets: () => Promise<WalletMetadata[]>;
disconnect: () => Promise<void>;
on: (type: UniversalWeb3ProviderEventType, handler: (params?: any) => void) => void;
off: (type: UniversalWeb3ProviderEventType, handler: (params?: any) => void) => void;
} 感觉可以再好好考量一下。 |
Beta Was this translation helpful? Give feedback.
-
以上是和 @yutingzhao1991 对齐的部分结论,愚指导看看有没有别的补充的 |
Beta Was this translation helpful? Give feedback.
-
最近开发的时候有了一些新的思考,感觉我们需要重新审视一下 Ant Design Web3 的定位,以及它的各个组件开发上的一些原则和规范,尤其是和区块链交互这一部分,是和 Ant Design 不一样的。比如:
Beta Was this translation helpful? Give feedback.
All reactions