Social Safe accounts 💚

Social Safes

The Safe Pass launch is a wonderful opportunity to expand Safe as the digital account for self ownership of social, messaging, data, collaboration, and identity, in addition to assets.

Safe actions rewarded

Transaction count: The number of transactions made with your Safe Account

Weekly user: You will be rewarded for using your Safe Account on a weekly basis

Will Safe{Pass} include non-financial actions that are secured by users’ Safe as their sign-on method or that they hold their account NFT with?

Examples of social protocols and apps potentially aligned with Safe

  • Ethereum Name Service (ENS) held by Safe account (Extra points per each setting and feature enabled)
  • Unique versions of a file saved to Fileverse
  • Messages sent on XMTP and PushChat
  • Meaningful interactions with POAP, Farcaster/Warpcast, Yup, and Lens

Assets stored: The USD value of the assets that are stored on your Safe Account

It’s nice to see Safe is also rewarding users for Safe’s original use of securing assets.

Locking SAFE privacy

Locking SAFE is a good first use case. The process of locking SAFE requires users with multiple Safes to move SAFE tokens into one account. Directly transferring SAFE into a public-friendly account reveals all of the users Safe accounts.

Coinbase has listed SAFE so that is an option for Coinbase users to send their SAFE through to their public-friendly Safe account. This exchange strategy does not provide full privacy, but is an improvement from directly transferring SAFE from all of your existing Safe accounts.

3 Likes

Set an ENS avatar with Safe account

ENS is a great place to start exploring Social Safes because ENS provides fundamentals to owning your digital identity, messaging, access controls, publishing, etc.

After moving ahurwitz.eth into my social Safe to secure my ENS in a smart account, I played with customizing ahurwitz.eth by setting an avatar.

Has anyone set an avatar for their ENS name that is held by their Safe account?

I’m able to successfully approve the offchain Safe approvals to set an ENS avatar. However, I’m not able to get to the onchain confirmation of the ENS action.

I’ve attempted both through the ENS Safe app and in the ENS app connecting to Safe through WalletConnet.

Expected

When I update my ENS avatar with an externally owned account (EOA), the “Confirm Details” view shows successfully after approving the offchain action(s), allowing me to finalize the avatar update onchain. This view does not show when attempting to update the avatar with Safe.

Observed

ENS Safe app (app.safe.global)

  • Approve ENS avatar “Sign and upload” directly in the ENS Safe app
  • Error: After approving the required amount of Safe actions nothing happens in the ENS app

ENS app with WalletConnect (app.ens.domains)

  • Approve ENS avatar “Sign and upload” by connecting to the ENS app through WalletConnect
  • Error: After approving the required amount of Safe actions the ENS app shows the error “Invalid signature” or “An unknown RPC error occurred. Details: Request expired. Please try again. Version: viem@2.9.15”.

Errors

  • With both methods there is a message when approving the transaction, “This message does not conform to the EIP-712 specification”. I’m not sure if this is related.

  • After the required threshold of approvals are completed on Safe, the onchain confirmation view is not showing. Instead of the “Confirm Details” view that shows when using an externally owned account (EOA), it shows the errors shown in the “Observed” section or nothing.

Workaround

Serenae.eth, who’s part of the ENS DAO, provided me the steps to set my avatar manually.

  1. Open the ENS app through the Safe app (app.safe.global) or directly (app.ens.domains) > Go to your ENS profile > “Records” tab
  2. Add a value with a “key” of avatar, the “value” to a public URL of my avatar, and complete the required number of approvals for your Safe.
  3. View the avatar image set on the “Profile” tab.

Attempted solutions

  • Clearing browser cache and cookies
  • Turning ad blockers and the VPN off
  • Changing the order that each approval account signs the Safe approvals
  • Browsers attempted: Firefox 126 and Chrome Version 124.0.6367.93
  • Shared with
    • ENS Discord
    • Safe support chat

Next steps

Much appreciated!

Are Safe accounts built to work with Gitcoin Passport and the Devcon raffle apps?

Ethereum’s Devcon conference coming up in Bangkok, Thailand is one of the largest opportunities to showcase the power of using social Safe accounts for security, convenience, and customability.

For $0.009 I created a Safe on Arbitrum for the Ethereum Devcon raffle today. I used a Safe so that I can have custom multifactor authentication (MFA) for my account. That is auth across multiple devices, apps, people, locations, etc. as secure or convenient as I’m comfortable with for this specific Devcon account.

  • To use raffle.devcon.org Safe needs to work with Gitcoin Passport. Unfortunately when I attempt to verify any stamp such as LinkedIn or Safe I receive the “Verification Failed” error.
  • It’s important to know the Devcon site also was unable to check the Safe accounts Passport score even though the Safe was able to successfully sign messages

Hopefully I can work with the Safe, Gitcoin, and/or Devcon teams to have Safe accounts working with the Devcon raffle deadline by this Tuesday.

Attempted solutions

  • I’ve tested on both Firefox and Brave browsers
  • Disconnected VPN and ad blockers
  • Cleared cache and cookies
  • Posted in the Gitcoin Discord “:speech_balloon: | peer-help” channel and messaged the Gitcoin Intercom support with the console logs

Details

Gitcoin Passport “Verification Failed” error

Gitcoin Passport Console log 401 error

5027-b60e02c5fa6a938f.js:1 verify - submitted, canSubmit false true false
5027-b60e02c5fa6a938f.js:1 geri banner {heading: ‘Verifying Contribution Activity’, content: ‘For the Contribution Activity credentials, make su… contribution history with your Gitcoin Passport!’, cta: {…}}
_app-e57793770c737a07.js:1

  POST https://rum.browser-intake-us3-datadoghq.com/api/v2/rum?ddsource=browser&ddtags=sdk_version%3A4.19.1%2Cenv%3Aprod%2Cservice%3Apassport-prod&dd-api-key=pub55edecb6ea7e86a241c204e990cb47c2&dd-evp-origin-version=4.19.1&dd-evp-origin=browser&dd-request-id=2230230d-1046-41e0-8234-22484b31968a&batch_time=1720409905937 net::ERR_BLOCKED_BY_CLIENT

sendBeaconStrategy @ _app-e57793770c737a07.js:1
sendOnExit @ _app-e57793770c737a07.js:1
Batch.flush @ _app-e57793770c737a07.js:1
Batch.flushOnExit @ _app-e57793770c737a07.js:1
(anonymous) @ _app-e57793770c737a07.js:1
callMonitored @ _app-e57793770c737a07.js:1
(anonymous) @ _app-e57793770c737a07.js:1
_app-e57793770c737a07.js:1

  POST https://logs.browser-intake-us3-datadoghq.com/api/v2/logs?ddsource=browser&ddtags=sdk_version%3A4.19.1%2Cenv%3Aprod%2Cservice%3Apassport-prod&dd-api-key=pub55edecb6ea7e86a241c204e990cb47c2&dd-evp-origin-version=4.19.1&dd-evp-origin=browser&dd-request-id=e61a686d-0364-47e4-acdf-a7ecf7500271 net::ERR_BLOCKED_BY_CLIENT

sendBeaconStrategy @ _app-e57793770c737a07.js:1
sendOnExit @ _app-e57793770c737a07.js:1
Batch.flush @ _app-e57793770c737a07.js:1
Batch.flushOnExit @ _app-e57793770c737a07.js:1
(anonymous) @ _app-e57793770c737a07.js:1
callMonitored @ _app-e57793770c737a07.js:1
(anonymous) @ _app-e57793770c737a07.js:1
_app-e57793770c737a07.js:1

  POST https://passport-iam.gitcoin.co/api/v0.0.0/verify 401 (Unauthorized)

(anonymous) @ _app-e57793770c737a07.js:1
instrumentationWrapper @ _app-e57793770c737a07.js:1
(anonymous) @ _app-e57793770c737a07.js:109
em.exports @ _app-e57793770c737a07.js:109
em.exports @ _app-e57793770c737a07.js:109
Axios.request @ _app-e57793770c737a07.js:109
Axios. @ _app-e57793770c737a07.js:109
(anonymous) @ _app-e57793770c737a07.js:109
fetchVerifiableCredential @ _app-e57793770c737a07.js:1
await in fetchVerifiableCredential (async)
handleFetchCredential @ 5027-b60e02c5fa6a938f.js:1
await in handleFetchCredential (async)
Nb @ framework-d7f437c5cbc76ba6.js:25
Tb @ framework-d7f437c5cbc76ba6.js:25
Ub @ framework-d7f437c5cbc76ba6.js:25
nf @ framework-d7f437c5cbc76ba6.js:25
se @ framework-d7f437c5cbc76ba6.js:25
(anonymous) @ framework-d7f437c5cbc76ba6.js:25
Rk @ framework-d7f437c5cbc76ba6.js:25
Jb @ framework-d7f437c5cbc76ba6.js:25
hd @ framework-d7f437c5cbc76ba6.js:25
fd @ framework-d7f437c5cbc76ba6.js:25
ed @ framework-d7f437c5cbc76ba6.js:25
_app-e57793770c737a07.js:1 Error: Request failed with status code 401
at em.exports (_app-e57793770c737a07.js:109:45276)
at em.exports (_app-e57793770c737a07.js:109:48601)
at XMLHttpRequest.onloadend (_app-e57793770c737a07.js:109:39048)
console. @ _app-e57793770c737a07.js:1
handleFetchCredential @ 5027-b60e02c5fa6a938f.js:1
await in handleFetchCredential (async)
Nb @ framework-d7f437c5cbc76ba6.js:25
Tb @ framework-d7f437c5cbc76ba6.js:25
Ub @ framework-d7f437c5cbc76ba6.js:25
nf @ framework-d7f437c5cbc76ba6.js:25
se @ framework-d7f437c5cbc76ba6.js:25
(anonymous) @ framework-d7f437c5cbc76ba6.js:25
Rk @ framework-d7f437c5cbc76ba6.js:25
Jb @ framework-d7f437c5cbc76ba6.js:25
hd @ framework-d7f437c5cbc76ba6.js:25
fd @ framework-d7f437c5cbc76ba6.js:25
ed @ framework-d7f437c5cbc76ba6.js:25
5027-b60e02c5fa6a938f.js:1 verify - submitted, canSubmit true true false
5027-b60e02c5fa6a938f.js:1 geri banner {heading: ‘Verifying Contribution Activity’, content: ‘For the Contribution Activity credentials, make su… contribution history with your Gitcoin Passport!’, cta: {…}}

Devcon raffle Passport check signed confirmations

Much appreciated!

Update opportunity for Gitcoin Passports for Safes

Skylar, one of the Devcon leads followed up quickly on X and helped us research the problem further.

  • Gitcoin Passport doesn’t support smart accounts as they haven’t built a way to verify stamps across mutliple networks, e.g. Ethereum mainnet and Arbitrum.
  • This is a similar situation to many use cases with multinetwork Safes that teams are solving for with push/pull data management strategies, proofs, bridges, etc.

The Gitcoin Passport team will need to work with Safe builders moving forward to support multinetwork Safes.

2 strategies for Safes to work with Gitcoin Passport

A. User “connects” 2 Safes on different networks by verifying each on Gitcoin Passport on each network 1 time. All future stamp verifications are shared using a push or pull model.
B. User verifies the same stamp across Safe accounts on different networks for every stamp.