# How to build a usdc/usdt custodial wallet on icp?

**URL:** <https://forum.dfinity.org/t/how-to-build-a-usdc-usdt-custodial-wallet-on-icp/35962>\
**Category:** Developers\
**Created:** [October 8, 2024, 11:24am UTC](https://forum.dfinity.org/t/how-to-build-a-usdc-usdt-custodial-wallet-on-icp/35962 "2024-10-08T11:24:30Z")\
**Posts on this page:** 1\
**Showing post:** 5

<div class="post-metadata">

**Author:** ![jennifertran](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/jennifertran/32/11558_2.png) [@jennifertran](https://forum.dfinity.org/u/jennifertran)\
**Post date:** [October 17, 2024, 4:31am UTC](https://forum.dfinity.org/t/how-to-build-a-usdc-usdt-custodial-wallet-on-icp/35962/5 "2024-10-17T04:31:04Z")

</div>

> [@AliSci](#):
>
> `encodePrincipalToEthAddress(Principal.fromText(profile.id))`

I am not sure if this is the right approach since the Principal is not specific to your canister and a user id. For example, let’s say that your user’s id is “abc”, you are then converting “abc” to a principal and then to an ETH address without any regard to the user specifically using your canister. Another dapp could convert the same text “abc" to a principal and then an ETH address. Multiple users could potentially share the same principal and ETH address.

Have you looked into Threshold ECDSA examples?

---

_[View the full topic](https://forum.dfinity.org/t/how-to-build-a-usdc-usdt-custodial-wallet-on-icp/35962)._
