SlideShare a Scribd company logo
1 of 26
Download to read offline
Table of Contents
● Understanding Ethereum Accounts
○ How it works
○ Limitations
● Account Abstraction
○ How it works
○ The IAccount interface
○ What it means for Dapp developers
● Use Cases
○ Fraud monitoring
○ Social Recovery
○ Secure Enclave
● How to build with Argent X
Ethereum Accounts 101
There is 2 types of Accounts on Ethereum:
- Externally Owned Accounts (EOA)
- Contract Accounts (CA)
The state of Ethereum S is the state of all the Accounts (EOA + CA)
The state can only be updated by transactions: S’ = T(S)
Every transaction T must be initiated (a.k.a start) from an EOA
from: <an EOA>
to: …
value: …
data: …
Ethereum Accounts 101
An (EOA) Account has:
- an address for identification
- a nonce to make sure transactions are unique
- a balance in ETH to pay fees
The EOA is “owned” by an external user through a pair of cryptographic keys:
- The address of the account is derived from the public key
- Transactions from the account must be signed by the private key
Ethereum Accounts 101
A cryptographic Signer is a pair of private and public key (kpriv
, kpub
) such that:
- The public key can be derived from the private key: kpriv
→ kpub
- The private key cannot be computed from the public key: kpub
→ kpriv
The private key can generate a signature Sig(m) for a message m such that:
- Anyone with kpub
can verify that the signature is valid for kpriv
- Only kpriv
can generate a valid signature for kpriv
The signature scheme of Ethereum is ECDSA on the elliptic curve secp256k1.
ECDSA has the additional property that (Sig(m), m) → kpub
Ethereum Accounts 101
address = keccak(kpub
)[0:19]
nonce + balance
EVM logic to validate and execute transactions
EOA Account
(kpriv
, kpub
)
Signer
Ethereum
User
ECDSA on Secp256k1
Ethereum Accounts 101
address = keccak(kpub
)[0:19]
nonce + balance
EVM logic to validate and execute transactions
EOA Account
(kpriv
, kpub
)
Signer
Ethereum
User
The concept of Account and the concept of Signer are merged.
ECDSA on Secp256k1
Holds your tokens Authorised to spend your tokens
Ethereum Account: Problems?
- The Signer IS the Account, and vice versa
→ You can derive the address of the Account from the Signer
→ You can verify a signature for the Account using the Signer (ecrecover)
- But:
- If you loose the Signer you loose the Account!
- If the Signer is compromised the Account is compromised!
- Everybody must use the same cryptography (ECDSA on secp256k1)
→ This will not work for mainstream adoption!
Account Abstraction
Goal: Decouple the relation between Account and Signer
→ Signer = Account
The account is a smart-contract that defines what a valid transaction is:
- Different Signature scheme?
- Different elliptic curve?
- Multiple Signers?
- Signer can be replaced?
On StarkNet the account must implement the IAccount interface.
IAccount interface
namespace IAccount {
struct Call:
member to: felt
member selector: felt
member data_len: felt
member data: felt*
}
func get_nonce() -> (res : felt):
func is_valid_signature(hash: felt, signature_len: felt, signature: felt*) -> (success:
felt):
func __execute__(calls_len: felt, calls: Call*) -> (response_len: felt, response: felt);
func __validate__(calls_len: felt, calls: Call*) -> (success: felt);
}
https://github.com/OpenZeppelin/cairo-contracts/blob/main/openzeppelin/account/Account.cairo
https://github.com/argentlabs/argent-contracts-starknet/blob/develop/contracts/ArgentAccount.cairo
IAccount interface
interface IAccount {
struct Call:
member to: felt
member selector: felt
member data_len: felt
member data: felt*
}
func get_nonce() -> (res : felt):
func is_valid_signature(hash: felt, signature_len: felt, signature: felt*) -> (success:
felt):
func __execute__(calls_len: felt, calls: Call*) -> (response_len: felt, response: felt);
func __validate__(calls_len: felt, calls: Call*) -> (success: felt);
}
https://github.com/OpenZeppelin/cairo-contracts/blob/main/openzeppelin/account/Account.cairo
https://github.com/argentlabs/argent-contracts-starknet/blob/develop/contracts/ArgentAccount.cairo
Verify off-chain signatures
IAccount interface
interface IAccount {
struct Call:
member to: felt
member selector: felt
member data_len: felt
member data: felt*
}
func get_nonce() -> (res : felt):
func is_valid_signature(hash: felt, signature_len: felt, signature: felt*) -> (success:
felt):
func __execute__(calls_len: felt, calls: Call*) -> (response_len: felt, response: felt);
func __validate__(calls_len: felt, calls: Call*) -> (success: felt);
}
https://github.com/OpenZeppelin/cairo-contracts/blob/main/openzeppelin/account/Account.cairo
https://github.com/argentlabs/argent-contracts-starknet/blob/develop/contracts/ArgentAccount.cairo
Used by the sequencer to validate
and execute a transaction
IAccount interface
interface IAccount {
struct Call:
member to: felt
member selector: felt
member data_len: felt
member data: felt*
}
func get_nonce() -> (res : felt):
func is_valid_signature(hash: felt, signature_len: felt, signature: felt*) -> (success:
felt):
func __execute__(calls_len: felt, calls: Call*) -> (response_len: felt, response: felt);
func __validate__(calls_len: felt, calls: Call*) -> (success: felt);
}
https://github.com/OpenZeppelin/cairo-contracts/blob/main/openzeppelin/account/Account.cairo
https://github.com/argentlabs/argent-contracts-starknet/blob/develop/contracts/ArgentAccount.cairo
Yeah Multicalls!
What it means for Dapp developers
1. The Account is a smart-contract
2. The address of the Account is not derived from the Signer
3. Transactions can have multiple signatures
→ sig = [sig1, sig2, …, sigN]
4. Off-chain signatures must be validated on-chain by the Account
→ You cannot use ecrecover(m, sig) locally!
→ You must use account.is_valid_signature(m, sig)
5. Bonus: You can use multicalls!
What it means for Dapp developers
1. The Account is a smart-contract
2. The address of the Account is not derived from the Signer
3. Transactions can have multiple signatures
→ sig = [sig1, sig2, …, sigN]
4. Off-chain signatures must be validated on-chain by the Account
→ You cannot use ecrecover(m, sig) locally
→ You must use account.is_valid_signature(m, sig)
5. Bonus: You can use multicalls!
All you need to remember!
Argent X?
● First Wallet on StarkNet
● Chrome extension
● Multi-account
● Multi (StarkNet) network
● Send and receive tokens
● Interact with dapps
How Argent X works
Argent X
Account Contract
StarkNet
func __execute__():
execute(doSomething, )
How Argent X works
Argent X
Account Contract Dapp Contract
Do Something
StarkNet
sendTransaction(doSomething) doSomething()
func __execute__(): func doSomething():
execute(doSomething, )
Signer
How Argent X works (developers)
Argent X
Account Contract Dapp Contract
Do Something
StarkNet
doSomething()
func __execute__(): func doSomething():
starknet.js
Js library to interact with StarkNet
execute(doSomething, , )
Use case 1: Fraud Monitoring
Argent X
Account Contract Dapp Contract
Do Something
StarkNet
sendTransaction(doSomething) doSomething()
func __execute__(): func doSomething():
Approve? -> YES +
Fraud Monitoring Service
Use case 1: Fraud Monitoring
Argent X
Account Contract Evil Contract
Do Something
StarkNet
sendTransaction(doEvil) doSomething()
func __execute__(): func doEvil():
Approve? -> No
Fraud Monitoring Service
X
escape( )
Use case 2: (Social) Recovery
Argent X
Account Contract
StarkNet
func __execute__():
Recovery Service
?
Use case 2: (Social) Recovery
Argent X
Account Contract
StarkNet
func __execute__():
Recovery Service
● Time delay of 7 days
● Can be canceled
● 100% non-custodial
● No more seed-phrases
Use case 3: Use the Secure Enclave
Argent X
Account Contract
StarkNet
func __execute__():
Secure Enclave*
* Uses a different elliptic curve (secp256r1) approved by the NIST
import { getStarknet } from "@argent/get-starknet"
// check if wallet extension is installed and initialized. Shows a modal prompting the user to download
// ArgentX otherwise.
const starknet = getStarknet({ showModal: true })
// may throws when no extension is detected
, or shows a modal prompting the user to download Argent X.
const [userAccountAddress] = await starknet.enable({ showModal: true }
)
// check if connection was successful
if(starknet.isConnected) {
// If the extension was installed and successfully connected, you have access to a
//starknet.js Signer object to do all kind of requests through the users wallet contract.
starknet.signer.invokeFunction
({ ... })
} else {
// In case the extension wasn't successfully connected you still have access to a
// starknet.js Provider to read starknet states and sent anonymous transactions
starknet.provider.callContract( ... )
}
How to get started
Time to Build!
● Download Argent X
https://chrome.google.com/webstore/detail/argent-x-starknet-wallet/dlcobpjiigpikoobohmabehhmhfoodbb?hl=fr
● npm install get-starknet
https://www.npmjs.com/package/@argent/get-starknet
● Contribute
https://github.com/argentlabs/argent-x
https://github.com/seanjameshan/starknet.js
● Join us on Discord #argent-extension

More Related Content

What's hot

2020-02-20 - HashiCorpUserGroup Madring - Integrating HashiCorp Vault and Kub...
2020-02-20 - HashiCorpUserGroup Madring - Integrating HashiCorp Vault and Kub...2020-02-20 - HashiCorpUserGroup Madring - Integrating HashiCorp Vault and Kub...
2020-02-20 - HashiCorpUserGroup Madring - Integrating HashiCorp Vault and Kub...Andrey Devyatkin
 
Comparing Cpp And Erlang For Motorola Telecoms Software
Comparing Cpp And Erlang For Motorola Telecoms SoftwareComparing Cpp And Erlang For Motorola Telecoms Software
Comparing Cpp And Erlang For Motorola Telecoms Softwarel xf
 
Blockchain, Ethereum and ConsenSys
Blockchain, Ethereum and ConsenSysBlockchain, Ethereum and ConsenSys
Blockchain, Ethereum and ConsenSysWithTheBest
 
PHP unserialization vulnerabilities: What are we missing?
PHP unserialization vulnerabilities: What are we missing?PHP unserialization vulnerabilities: What are we missing?
PHP unserialization vulnerabilities: What are we missing?Sam Thomas
 
Getting Started with IT Service Intelligence
Getting Started with IT Service IntelligenceGetting Started with IT Service Intelligence
Getting Started with IT Service IntelligenceSplunk
 
Derbycon - The Unintended Risks of Trusting Active Directory
Derbycon - The Unintended Risks of Trusting Active DirectoryDerbycon - The Unintended Risks of Trusting Active Directory
Derbycon - The Unintended Risks of Trusting Active DirectoryWill Schroeder
 
OWASP Top 10 2021 What's New
OWASP Top 10 2021 What's NewOWASP Top 10 2021 What's New
OWASP Top 10 2021 What's NewMichael Furman
 
Building a Data Pipeline from Scratch - Joe Crobak
Building a Data Pipeline from Scratch - Joe CrobakBuilding a Data Pipeline from Scratch - Joe Crobak
Building a Data Pipeline from Scratch - Joe CrobakHakka Labs
 
Asp.net mvc filters
Asp.net mvc filtersAsp.net mvc filters
Asp.net mvc filtersEyal Vardi
 
API Security - Everything You Need to Know To Protect Your APIs
API Security - Everything You Need to Know To Protect Your APIsAPI Security - Everything You Need to Know To Protect Your APIs
API Security - Everything You Need to Know To Protect Your APIsAaronLieberman5
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomyDongmin Yu
 
Building an open data platform with apache iceberg
Building an open data platform with apache icebergBuilding an open data platform with apache iceberg
Building an open data platform with apache icebergAlluxio, Inc.
 
Introduction to Filecoin
Introduction to Filecoin   Introduction to Filecoin
Introduction to Filecoin Vanessa Lošić
 
Building a Real-time Data Pipeline: Apache Kafka at LinkedIn
Building a Real-time Data Pipeline: Apache Kafka at LinkedInBuilding a Real-time Data Pipeline: Apache Kafka at LinkedIn
Building a Real-time Data Pipeline: Apache Kafka at LinkedInDataWorks Summit
 

What's hot (20)

2020-02-20 - HashiCorpUserGroup Madring - Integrating HashiCorp Vault and Kub...
2020-02-20 - HashiCorpUserGroup Madring - Integrating HashiCorp Vault and Kub...2020-02-20 - HashiCorpUserGroup Madring - Integrating HashiCorp Vault and Kub...
2020-02-20 - HashiCorpUserGroup Madring - Integrating HashiCorp Vault and Kub...
 
Comparing Cpp And Erlang For Motorola Telecoms Software
Comparing Cpp And Erlang For Motorola Telecoms SoftwareComparing Cpp And Erlang For Motorola Telecoms Software
Comparing Cpp And Erlang For Motorola Telecoms Software
 
Introduction to Kotlin - Android KTX
Introduction to Kotlin - Android KTXIntroduction to Kotlin - Android KTX
Introduction to Kotlin - Android KTX
 
Blockchain, Ethereum and ConsenSys
Blockchain, Ethereum and ConsenSysBlockchain, Ethereum and ConsenSys
Blockchain, Ethereum and ConsenSys
 
PHP unserialization vulnerabilities: What are we missing?
PHP unserialization vulnerabilities: What are we missing?PHP unserialization vulnerabilities: What are we missing?
PHP unserialization vulnerabilities: What are we missing?
 
Getting Started with IT Service Intelligence
Getting Started with IT Service IntelligenceGetting Started with IT Service Intelligence
Getting Started with IT Service Intelligence
 
Derbycon - The Unintended Risks of Trusting Active Directory
Derbycon - The Unintended Risks of Trusting Active DirectoryDerbycon - The Unintended Risks of Trusting Active Directory
Derbycon - The Unintended Risks of Trusting Active Directory
 
OAuth 2.0 Security Reinforced
OAuth 2.0 Security ReinforcedOAuth 2.0 Security Reinforced
OAuth 2.0 Security Reinforced
 
OWASP Top 10 2021 What's New
OWASP Top 10 2021 What's NewOWASP Top 10 2021 What's New
OWASP Top 10 2021 What's New
 
Building a Data Pipeline from Scratch - Joe Crobak
Building a Data Pipeline from Scratch - Joe CrobakBuilding a Data Pipeline from Scratch - Joe Crobak
Building a Data Pipeline from Scratch - Joe Crobak
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
Asp.net mvc filters
Asp.net mvc filtersAsp.net mvc filters
Asp.net mvc filters
 
API Security - Everything You Need to Know To Protect Your APIs
API Security - Everything You Need to Know To Protect Your APIsAPI Security - Everything You Need to Know To Protect Your APIs
API Security - Everything You Need to Know To Protect Your APIs
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomy
 
Maven
MavenMaven
Maven
 
Building an open data platform with apache iceberg
Building an open data platform with apache icebergBuilding an open data platform with apache iceberg
Building an open data platform with apache iceberg
 
Introduction to Filecoin
Introduction to Filecoin   Introduction to Filecoin
Introduction to Filecoin
 
Building a Real-time Data Pipeline: Apache Kafka at LinkedIn
Building a Real-time Data Pipeline: Apache Kafka at LinkedInBuilding a Real-time Data Pipeline: Apache Kafka at LinkedIn
Building a Real-time Data Pipeline: Apache Kafka at LinkedIn
 
Google V8 engine
Google V8 engineGoogle V8 engine
Google V8 engine
 
Litecoin Crypto Currency Bootcamp
Litecoin Crypto Currency BootcampLitecoin Crypto Currency Bootcamp
Litecoin Crypto Currency Bootcamp
 

Similar to Starkware: Account Abstraction

Encode x NEAR: Technical Overview of NEAR 1
Encode x NEAR: Technical Overview of NEAR 1Encode x NEAR: Technical Overview of NEAR 1
Encode x NEAR: Technical Overview of NEAR 1KlaraOrban
 
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session 병완 임
 
以太坊代幣付款委託 @ Open Source Developer Meetup #12
以太坊代幣付款委託 @ Open Source Developer Meetup #12以太坊代幣付款委託 @ Open Source Developer Meetup #12
以太坊代幣付款委託 @ Open Source Developer Meetup #12Aludirk Wong
 
Robust Programming of Smart Contracts in Solidity+, RK Shyamasundar
Robust Programming of Smart Contracts in Solidity+, RK ShyamasundarRobust Programming of Smart Contracts in Solidity+, RK Shyamasundar
Robust Programming of Smart Contracts in Solidity+, RK ShyamasundarNapier University
 
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereumDappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereumTomoaki Sato
 
Ethereum hackers
Ethereum hackersEthereum hackers
Ethereum hackersgavofyork
 
A simplified Bitcoin Implementation in GO
A simplified Bitcoin Implementation in GOA simplified Bitcoin Implementation in GO
A simplified Bitcoin Implementation in GOBrian Yap
 
Ethereum Smart Contract Tutorial
Ethereum Smart Contract TutorialEthereum Smart Contract Tutorial
Ethereum Smart Contract TutorialArnold Pham
 
Ethereummeetuppresentation01 170105172132
Ethereummeetuppresentation01 170105172132Ethereummeetuppresentation01 170105172132
Ethereummeetuppresentation01 170105172132Rihazudin Razik MBCS
 
DevDay: Getting Started with Tokens and Accounts, R3
DevDay: Getting Started with Tokens and Accounts, R3DevDay: Getting Started with Tokens and Accounts, R3
DevDay: Getting Started with Tokens and Accounts, R3R3
 
Ethereum: Coding Society
Ethereum: Coding SocietyEthereum: Coding Society
Ethereum: Coding Societygavofyork
 
Droid on Chain - Berry Ventura Lev, Kik
Droid on Chain - Berry Ventura Lev, KikDroid on Chain - Berry Ventura Lev, Kik
Droid on Chain - Berry Ventura Lev, KikDroidConTLV
 
A Decompiler for Blackhain-Based Smart Contracts Bytecode
A Decompiler for Blackhain-Based Smart Contracts BytecodeA Decompiler for Blackhain-Based Smart Contracts Bytecode
A Decompiler for Blackhain-Based Smart Contracts BytecodeShakacon
 
Features to required create erc 20
Features to required create erc 20 Features to required create erc 20
Features to required create erc 20 Alladin Nasir
 
Uni v2 eth-dai analysis
Uni v2 eth-dai analysisUni v2 eth-dai analysis
Uni v2 eth-dai analysisJonnyHimalaya
 
Braavos Wallet Workshop.pdf
Braavos Wallet Workshop.pdfBraavos Wallet Workshop.pdf
Braavos Wallet Workshop.pdfTinaBregovi
 
Switcheo Network - Advanced NEO Smart Contracts
Switcheo Network - Advanced NEO Smart ContractsSwitcheo Network - Advanced NEO Smart Contracts
Switcheo Network - Advanced NEO Smart ContractsSwitcheo
 
Build on Streakk Chain - Blockchain
Build on Streakk Chain - BlockchainBuild on Streakk Chain - Blockchain
Build on Streakk Chain - BlockchainEarn.World
 
The world computer
The world computerThe world computer
The world computergavofyork
 
How to be a smart contract engineer
How to be a smart contract engineerHow to be a smart contract engineer
How to be a smart contract engineerOded Noam
 

Similar to Starkware: Account Abstraction (20)

Encode x NEAR: Technical Overview of NEAR 1
Encode x NEAR: Technical Overview of NEAR 1Encode x NEAR: Technical Overview of NEAR 1
Encode x NEAR: Technical Overview of NEAR 1
 
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
 
以太坊代幣付款委託 @ Open Source Developer Meetup #12
以太坊代幣付款委託 @ Open Source Developer Meetup #12以太坊代幣付款委託 @ Open Source Developer Meetup #12
以太坊代幣付款委託 @ Open Source Developer Meetup #12
 
Robust Programming of Smart Contracts in Solidity+, RK Shyamasundar
Robust Programming of Smart Contracts in Solidity+, RK ShyamasundarRobust Programming of Smart Contracts in Solidity+, RK Shyamasundar
Robust Programming of Smart Contracts in Solidity+, RK Shyamasundar
 
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereumDappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereum
 
Ethereum hackers
Ethereum hackersEthereum hackers
Ethereum hackers
 
A simplified Bitcoin Implementation in GO
A simplified Bitcoin Implementation in GOA simplified Bitcoin Implementation in GO
A simplified Bitcoin Implementation in GO
 
Ethereum Smart Contract Tutorial
Ethereum Smart Contract TutorialEthereum Smart Contract Tutorial
Ethereum Smart Contract Tutorial
 
Ethereummeetuppresentation01 170105172132
Ethereummeetuppresentation01 170105172132Ethereummeetuppresentation01 170105172132
Ethereummeetuppresentation01 170105172132
 
DevDay: Getting Started with Tokens and Accounts, R3
DevDay: Getting Started with Tokens and Accounts, R3DevDay: Getting Started with Tokens and Accounts, R3
DevDay: Getting Started with Tokens and Accounts, R3
 
Ethereum: Coding Society
Ethereum: Coding SocietyEthereum: Coding Society
Ethereum: Coding Society
 
Droid on Chain - Berry Ventura Lev, Kik
Droid on Chain - Berry Ventura Lev, KikDroid on Chain - Berry Ventura Lev, Kik
Droid on Chain - Berry Ventura Lev, Kik
 
A Decompiler for Blackhain-Based Smart Contracts Bytecode
A Decompiler for Blackhain-Based Smart Contracts BytecodeA Decompiler for Blackhain-Based Smart Contracts Bytecode
A Decompiler for Blackhain-Based Smart Contracts Bytecode
 
Features to required create erc 20
Features to required create erc 20 Features to required create erc 20
Features to required create erc 20
 
Uni v2 eth-dai analysis
Uni v2 eth-dai analysisUni v2 eth-dai analysis
Uni v2 eth-dai analysis
 
Braavos Wallet Workshop.pdf
Braavos Wallet Workshop.pdfBraavos Wallet Workshop.pdf
Braavos Wallet Workshop.pdf
 
Switcheo Network - Advanced NEO Smart Contracts
Switcheo Network - Advanced NEO Smart ContractsSwitcheo Network - Advanced NEO Smart Contracts
Switcheo Network - Advanced NEO Smart Contracts
 
Build on Streakk Chain - Blockchain
Build on Streakk Chain - BlockchainBuild on Streakk Chain - Blockchain
Build on Streakk Chain - Blockchain
 
The world computer
The world computerThe world computer
The world computer
 
How to be a smart contract engineer
How to be a smart contract engineerHow to be a smart contract engineer
How to be a smart contract engineer
 

More from TinaBregovi

Building LSD Use Cases on Bifrost
Building LSD Use Cases on BifrostBuilding LSD Use Cases on Bifrost
Building LSD Use Cases on BifrostTinaBregovi
 
Urbit Launch Event
Urbit Launch EventUrbit Launch Event
Urbit Launch EventTinaBregovi
 
Layer Hack: Boba Network: Understanding Hybrid Compute
Layer Hack: Boba Network: Understanding Hybrid ComputeLayer Hack: Boba Network: Understanding Hybrid Compute
Layer Hack: Boba Network: Understanding Hybrid ComputeTinaBregovi
 
Layer Hack: zkSync - Intro to zkEVM
Layer Hack: zkSync - Intro to zkEVMLayer Hack: zkSync - Intro to zkEVM
Layer Hack: zkSync - Intro to zkEVMTinaBregovi
 
Layer Hack: AltLayer Workshop
Layer Hack: AltLayer WorkshopLayer Hack: AltLayer Workshop
Layer Hack: AltLayer WorkshopTinaBregovi
 
Layer Hack Launch Event
Layer Hack Launch EventLayer Hack Launch Event
Layer Hack Launch EventTinaBregovi
 
Bridging with StarkNet
Bridging with StarkNetBridging with StarkNet
Bridging with StarkNetTinaBregovi
 
How To Build Better NFTs with Briq
How To Build Better NFTs with BriqHow To Build Better NFTs with Briq
How To Build Better NFTs with BriqTinaBregovi
 
NFTs on StarkNet
NFTs on StarkNetNFTs on StarkNet
NFTs on StarkNetTinaBregovi
 
How to build a dApp in StarkNet
How to build a dApp in StarkNetHow to build a dApp in StarkNet
How to build a dApp in StarkNetTinaBregovi
 
StarkNet Autumn Hackathon Launch Event.pptx
StarkNet Autumn Hackathon Launch Event.pptxStarkNet Autumn Hackathon Launch Event.pptx
StarkNet Autumn Hackathon Launch Event.pptxTinaBregovi
 
Harmony Marketplace SDK.pptx
Harmony Marketplace SDK.pptxHarmony Marketplace SDK.pptx
Harmony Marketplace SDK.pptxTinaBregovi
 
Get Ready for Coinbase Node
Get Ready for Coinbase NodeGet Ready for Coinbase Node
Get Ready for Coinbase NodeTinaBregovi
 
MANIFOLD MEV Bounty Competition
MANIFOLD MEV Bounty CompetitionMANIFOLD MEV Bounty Competition
MANIFOLD MEV Bounty CompetitionTinaBregovi
 
Public SP Meeting
Public SP MeetingPublic SP Meeting
Public SP MeetingTinaBregovi
 
Welcome to the Web 3.0
Welcome to the Web 3.0Welcome to the Web 3.0
Welcome to the Web 3.0TinaBregovi
 
Introduction to IPFS & Filecoin - longer version
Introduction to IPFS & Filecoin - longer versionIntroduction to IPFS & Filecoin - longer version
Introduction to IPFS & Filecoin - longer versionTinaBregovi
 
Introduction to IPFS & Filecoin
Introduction to IPFS & FilecoinIntroduction to IPFS & Filecoin
Introduction to IPFS & FilecoinTinaBregovi
 

More from TinaBregovi (20)

Building LSD Use Cases on Bifrost
Building LSD Use Cases on BifrostBuilding LSD Use Cases on Bifrost
Building LSD Use Cases on Bifrost
 
Urbit Launch Event
Urbit Launch EventUrbit Launch Event
Urbit Launch Event
 
Layer Hack: Boba Network: Understanding Hybrid Compute
Layer Hack: Boba Network: Understanding Hybrid ComputeLayer Hack: Boba Network: Understanding Hybrid Compute
Layer Hack: Boba Network: Understanding Hybrid Compute
 
Layer Hack: zkSync - Intro to zkEVM
Layer Hack: zkSync - Intro to zkEVMLayer Hack: zkSync - Intro to zkEVM
Layer Hack: zkSync - Intro to zkEVM
 
Layer Hack: AltLayer Workshop
Layer Hack: AltLayer WorkshopLayer Hack: AltLayer Workshop
Layer Hack: AltLayer Workshop
 
Layer Hack Launch Event
Layer Hack Launch EventLayer Hack Launch Event
Layer Hack Launch Event
 
Bridging with StarkNet
Bridging with StarkNetBridging with StarkNet
Bridging with StarkNet
 
How To Build Better NFTs with Briq
How To Build Better NFTs with BriqHow To Build Better NFTs with Briq
How To Build Better NFTs with Briq
 
NFTs on StarkNet
NFTs on StarkNetNFTs on StarkNet
NFTs on StarkNet
 
How to build a dApp in StarkNet
How to build a dApp in StarkNetHow to build a dApp in StarkNet
How to build a dApp in StarkNet
 
StarkNet Autumn Hackathon Launch Event.pptx
StarkNet Autumn Hackathon Launch Event.pptxStarkNet Autumn Hackathon Launch Event.pptx
StarkNet Autumn Hackathon Launch Event.pptx
 
Harmony Marketplace SDK.pptx
Harmony Marketplace SDK.pptxHarmony Marketplace SDK.pptx
Harmony Marketplace SDK.pptx
 
Coinbase Node
Coinbase NodeCoinbase Node
Coinbase Node
 
Get Ready for Coinbase Node
Get Ready for Coinbase NodeGet Ready for Coinbase Node
Get Ready for Coinbase Node
 
MANIFOLD MEV Bounty Competition
MANIFOLD MEV Bounty CompetitionMANIFOLD MEV Bounty Competition
MANIFOLD MEV Bounty Competition
 
Public SP Meeting
Public SP MeetingPublic SP Meeting
Public SP Meeting
 
Ecosystem WG
Ecosystem WGEcosystem WG
Ecosystem WG
 
Welcome to the Web 3.0
Welcome to the Web 3.0Welcome to the Web 3.0
Welcome to the Web 3.0
 
Introduction to IPFS & Filecoin - longer version
Introduction to IPFS & Filecoin - longer versionIntroduction to IPFS & Filecoin - longer version
Introduction to IPFS & Filecoin - longer version
 
Introduction to IPFS & Filecoin
Introduction to IPFS & FilecoinIntroduction to IPFS & Filecoin
Introduction to IPFS & Filecoin
 

Recently uploaded

Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 

Recently uploaded (20)

Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 

Starkware: Account Abstraction

  • 1.
  • 2. Table of Contents ● Understanding Ethereum Accounts ○ How it works ○ Limitations ● Account Abstraction ○ How it works ○ The IAccount interface ○ What it means for Dapp developers ● Use Cases ○ Fraud monitoring ○ Social Recovery ○ Secure Enclave ● How to build with Argent X
  • 3. Ethereum Accounts 101 There is 2 types of Accounts on Ethereum: - Externally Owned Accounts (EOA) - Contract Accounts (CA) The state of Ethereum S is the state of all the Accounts (EOA + CA) The state can only be updated by transactions: S’ = T(S) Every transaction T must be initiated (a.k.a start) from an EOA from: <an EOA> to: … value: … data: …
  • 4. Ethereum Accounts 101 An (EOA) Account has: - an address for identification - a nonce to make sure transactions are unique - a balance in ETH to pay fees The EOA is “owned” by an external user through a pair of cryptographic keys: - The address of the account is derived from the public key - Transactions from the account must be signed by the private key
  • 5. Ethereum Accounts 101 A cryptographic Signer is a pair of private and public key (kpriv , kpub ) such that: - The public key can be derived from the private key: kpriv → kpub - The private key cannot be computed from the public key: kpub → kpriv The private key can generate a signature Sig(m) for a message m such that: - Anyone with kpub can verify that the signature is valid for kpriv - Only kpriv can generate a valid signature for kpriv The signature scheme of Ethereum is ECDSA on the elliptic curve secp256k1. ECDSA has the additional property that (Sig(m), m) → kpub
  • 6. Ethereum Accounts 101 address = keccak(kpub )[0:19] nonce + balance EVM logic to validate and execute transactions EOA Account (kpriv , kpub ) Signer Ethereum User ECDSA on Secp256k1
  • 7. Ethereum Accounts 101 address = keccak(kpub )[0:19] nonce + balance EVM logic to validate and execute transactions EOA Account (kpriv , kpub ) Signer Ethereum User The concept of Account and the concept of Signer are merged. ECDSA on Secp256k1 Holds your tokens Authorised to spend your tokens
  • 8. Ethereum Account: Problems? - The Signer IS the Account, and vice versa → You can derive the address of the Account from the Signer → You can verify a signature for the Account using the Signer (ecrecover) - But: - If you loose the Signer you loose the Account! - If the Signer is compromised the Account is compromised! - Everybody must use the same cryptography (ECDSA on secp256k1) → This will not work for mainstream adoption!
  • 9. Account Abstraction Goal: Decouple the relation between Account and Signer → Signer = Account The account is a smart-contract that defines what a valid transaction is: - Different Signature scheme? - Different elliptic curve? - Multiple Signers? - Signer can be replaced? On StarkNet the account must implement the IAccount interface.
  • 10. IAccount interface namespace IAccount { struct Call: member to: felt member selector: felt member data_len: felt member data: felt* } func get_nonce() -> (res : felt): func is_valid_signature(hash: felt, signature_len: felt, signature: felt*) -> (success: felt): func __execute__(calls_len: felt, calls: Call*) -> (response_len: felt, response: felt); func __validate__(calls_len: felt, calls: Call*) -> (success: felt); } https://github.com/OpenZeppelin/cairo-contracts/blob/main/openzeppelin/account/Account.cairo https://github.com/argentlabs/argent-contracts-starknet/blob/develop/contracts/ArgentAccount.cairo
  • 11. IAccount interface interface IAccount { struct Call: member to: felt member selector: felt member data_len: felt member data: felt* } func get_nonce() -> (res : felt): func is_valid_signature(hash: felt, signature_len: felt, signature: felt*) -> (success: felt): func __execute__(calls_len: felt, calls: Call*) -> (response_len: felt, response: felt); func __validate__(calls_len: felt, calls: Call*) -> (success: felt); } https://github.com/OpenZeppelin/cairo-contracts/blob/main/openzeppelin/account/Account.cairo https://github.com/argentlabs/argent-contracts-starknet/blob/develop/contracts/ArgentAccount.cairo Verify off-chain signatures
  • 12. IAccount interface interface IAccount { struct Call: member to: felt member selector: felt member data_len: felt member data: felt* } func get_nonce() -> (res : felt): func is_valid_signature(hash: felt, signature_len: felt, signature: felt*) -> (success: felt): func __execute__(calls_len: felt, calls: Call*) -> (response_len: felt, response: felt); func __validate__(calls_len: felt, calls: Call*) -> (success: felt); } https://github.com/OpenZeppelin/cairo-contracts/blob/main/openzeppelin/account/Account.cairo https://github.com/argentlabs/argent-contracts-starknet/blob/develop/contracts/ArgentAccount.cairo Used by the sequencer to validate and execute a transaction
  • 13. IAccount interface interface IAccount { struct Call: member to: felt member selector: felt member data_len: felt member data: felt* } func get_nonce() -> (res : felt): func is_valid_signature(hash: felt, signature_len: felt, signature: felt*) -> (success: felt): func __execute__(calls_len: felt, calls: Call*) -> (response_len: felt, response: felt); func __validate__(calls_len: felt, calls: Call*) -> (success: felt); } https://github.com/OpenZeppelin/cairo-contracts/blob/main/openzeppelin/account/Account.cairo https://github.com/argentlabs/argent-contracts-starknet/blob/develop/contracts/ArgentAccount.cairo Yeah Multicalls!
  • 14. What it means for Dapp developers 1. The Account is a smart-contract 2. The address of the Account is not derived from the Signer 3. Transactions can have multiple signatures → sig = [sig1, sig2, …, sigN] 4. Off-chain signatures must be validated on-chain by the Account → You cannot use ecrecover(m, sig) locally! → You must use account.is_valid_signature(m, sig) 5. Bonus: You can use multicalls!
  • 15. What it means for Dapp developers 1. The Account is a smart-contract 2. The address of the Account is not derived from the Signer 3. Transactions can have multiple signatures → sig = [sig1, sig2, …, sigN] 4. Off-chain signatures must be validated on-chain by the Account → You cannot use ecrecover(m, sig) locally → You must use account.is_valid_signature(m, sig) 5. Bonus: You can use multicalls! All you need to remember!
  • 16. Argent X? ● First Wallet on StarkNet ● Chrome extension ● Multi-account ● Multi (StarkNet) network ● Send and receive tokens ● Interact with dapps
  • 17. How Argent X works Argent X Account Contract StarkNet func __execute__():
  • 18. execute(doSomething, ) How Argent X works Argent X Account Contract Dapp Contract Do Something StarkNet sendTransaction(doSomething) doSomething() func __execute__(): func doSomething():
  • 19. execute(doSomething, ) Signer How Argent X works (developers) Argent X Account Contract Dapp Contract Do Something StarkNet doSomething() func __execute__(): func doSomething(): starknet.js Js library to interact with StarkNet
  • 20. execute(doSomething, , ) Use case 1: Fraud Monitoring Argent X Account Contract Dapp Contract Do Something StarkNet sendTransaction(doSomething) doSomething() func __execute__(): func doSomething(): Approve? -> YES + Fraud Monitoring Service
  • 21. Use case 1: Fraud Monitoring Argent X Account Contract Evil Contract Do Something StarkNet sendTransaction(doEvil) doSomething() func __execute__(): func doEvil(): Approve? -> No Fraud Monitoring Service X
  • 22. escape( ) Use case 2: (Social) Recovery Argent X Account Contract StarkNet func __execute__(): Recovery Service ?
  • 23. Use case 2: (Social) Recovery Argent X Account Contract StarkNet func __execute__(): Recovery Service ● Time delay of 7 days ● Can be canceled ● 100% non-custodial ● No more seed-phrases
  • 24. Use case 3: Use the Secure Enclave Argent X Account Contract StarkNet func __execute__(): Secure Enclave* * Uses a different elliptic curve (secp256r1) approved by the NIST
  • 25. import { getStarknet } from "@argent/get-starknet" // check if wallet extension is installed and initialized. Shows a modal prompting the user to download // ArgentX otherwise. const starknet = getStarknet({ showModal: true }) // may throws when no extension is detected , or shows a modal prompting the user to download Argent X. const [userAccountAddress] = await starknet.enable({ showModal: true } ) // check if connection was successful if(starknet.isConnected) { // If the extension was installed and successfully connected, you have access to a //starknet.js Signer object to do all kind of requests through the users wallet contract. starknet.signer.invokeFunction ({ ... }) } else { // In case the extension wasn't successfully connected you still have access to a // starknet.js Provider to read starknet states and sent anonymous transactions starknet.provider.callContract( ... ) } How to get started
  • 26. Time to Build! ● Download Argent X https://chrome.google.com/webstore/detail/argent-x-starknet-wallet/dlcobpjiigpikoobohmabehhmhfoodbb?hl=fr ● npm install get-starknet https://www.npmjs.com/package/@argent/get-starknet ● Contribute https://github.com/argentlabs/argent-x https://github.com/seanjameshan/starknet.js ● Join us on Discord #argent-extension