Deploy your first contract
This tutorial shows you how to deploy and interact with a smart contract on ZKsync Era in less than 5 minutes. It will help you get familiar with the ZKsync smart contract development and deployment process using different tools.
In this section you will learn how to:
Build a smart contract to exchange messages with Zeek.
Deploy the smart contract to the ZKsync Sepolia Testnet.
Interact with the contract from your browser using Remix or Atlas.
Prerequisites
- Before you start, make sure that you’ve configured the ZKsync Sepolia Testnet in your wallet.
- Have at least 0.5 ZKsync Sepolia Testnet ETH. If you need more, use one of the faucets.
Review the smart contract code
The smart contract will store messages from users and emit events with replies from Zeek. The entire code is as follows:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract ZeekMessages {
string[] private messages;
// Event to acknowledge a new message
event MessageReceived(string);
constructor() {
// Zeek initializes the contract with a welcome message
emit MessageReceived("Zeek welcomes you to ZKsync!");
}
function sendMessage(string memory _message) public {
messages.push(_message);
// Acknowledge the message receipt with Zeek's reply
emit MessageReceived("ZK is the endgame - Message received!");
}
// Function to count the total messages sent to Zeek
function getTotalMessages() public view returns (uint) {
return messages.length;
}
// Function to return the last message sent to Zeek
function getLastMessage() public view returns (string memory) {
require(messages.length > 0, "No messages sent to Zeek yet!");
return messages[messages.length - 1];
}
}
The Solidity smart contract contains two functions:
sendMessage
stores the messages sent by users in themessages
state variable.getTotalMessages
returns the number of messages stored in the smart contract.getLastMessage
returns the last message sent.
Compile and deploy the contract
To compile and deploy the contract you can use either Atlas or Remix:
Atlas is a browser-based IDE with an integrated AI assistant that allows you to write, test and deploy smart contracts directly from your browser. Click the button below to open the project in Atlas.
Open smart contract in AtlasCompile and deploy the contract
Enter a name for the project and you will see the contract in the Atlas code editor. On the right side, make sure the selected network is “ZKsync Sepolia Testnet“ and click on “Deploy” to trigger the smart contract compilation and deployment.
zksolc
) to generate ZKEVM compatible bytecode. Learn more about ZKsync custom compilers.Once compiled sign the transaction with your wallet and wait until it's processed. You’ll see the contract in the “Deployed contracts” section. Congratulations, you’ve deployed your first smart contract to ZKsync Sepolia Testnet!
Interact with the contract
Below the contract name you can find its deployment address. The “Live Contract State” section displays the smart
contract balance and the value returned by the getTotalMessages
function.
The “Write Functions” section contains the form to interact with the sendMessage
function. Write a message, click the
“Run” button and confirm the transaction in your wallet. You’ll see that the getTotalMessages
is updated to 1
and
getLastMessage
returns the message you just sent. That means our contract is storing the messages as expected! But how
can you see the replies from Zeek?
Check the contract in explorer
Copy the smart contract address from Atlas/Remix and search it via the ZKsync Sepolia Testnet explorer. You’ll see the contract has a transaction from the message you just sent.
The status will be “Processed” on ZKsync Era and “Sending” on Ethereum. Learn more about the transaction lifecycle on ZKsync.
In the “Contract” tab you’ll see the contract source code as Atlas and Remix automatically verified the contract for us. When a smart contract is verified in a block explorer, it means that the source code of the contract has been published and matched to the compiled version on the blockchain enhancing transparency, as users can review the contract’s source code to understand its functions and intentions.
Finally in the “Events” tab, you’ll see the replies from Zeek as these are emitted as events in our smart contract.
ZK is the endgame ✌️
Takeaways
- EVM-compatibility: ZKsync Era is EVM-compatible and you can write smart contracts in Solidity or Vyper as in Ethereum.
- Custom compilers: smart contracts deployed to ZKsync Era must be compiled with the customs compilers:
zksolc
for Solidity andzkvyper
for Vyper. - Browser-based IDEs: Existing tools like Atlas and Remix use ZKsync custom compilers under the hood.
Next steps
- Continue learning by deploying an ERC20 token to ZKsync.
- Join the ZKsync developer community in Discord where you can ask any questions about this
tutorial in the
#dev-quickstart
channel. - Join our GitHub Discussions Community to help other devs building on ZKsync or share your project.