<feed xmlns="http://www.w3.org/2005/Atom"> <id>https://cairopractice.com/</id><title>Cairopractice</title><subtitle>A blog about Cairo and Starknet</subtitle> <updated>2025-01-28T18:13:09+01:00</updated> <author> <name>Milan</name> <uri>https://cairopractice.com/</uri> </author><link rel="self" type="application/atom+xml" href="https://cairopractice.com/feed.xml"/><link rel="alternate" type="text/html" hreflang="en" href="https://cairopractice.com/"/> <generator uri="https://jekyllrb.com/" version="4.4.0">Jekyll</generator> <rights> © 2025 Milan </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title>Building a fully onchain NFT</title><link href="https://cairopractice.com/posts/onchain-nft-tutorial/" rel="alternate" type="text/html" title="Building a fully onchain NFT" /><published>2024-09-23T00:00:00+02:00</published> <updated>2024-09-23T00:00:00+02:00</updated> <id>https://cairopractice.com/posts/onchain-nft-tutorial/</id> <content src="https://cairopractice.com/posts/onchain-nft-tutorial/" /> <author> <name>m</name> </author> <summary> Let’s build a fully onchain NFT. It will look something like this: To achieve this, there are three standards we need to stitch together - Data URI, Opensea Metadata Standard and SVG. We’ll have a look at them individually first. Data URI A Data URI is a way how to represent “stuff” inline, in a single string that web browsers and libraries understand. In our case, the “stuff” we need to r... </summary> </entry> <entry><title>The inherent security of Starknet</title><link href="https://cairopractice.com/posts/security/" rel="alternate" type="text/html" title="The inherent security of Starknet" /><published>2024-09-03T00:00:00+02:00</published> <updated>2024-09-03T00:00:00+02:00</updated> <id>https://cairopractice.com/posts/security/</id> <content src="https://cairopractice.com/posts/security/" /> <author> <name>m</name> </author> <summary> When building blockchain applications, security is paramount, regardless what some fools say. Thankfully, many factors of how Starknet is designed and built contribute to it being the safest blockchain out there. As the name suggests, Starknet is using STARKs as the proving technology. STARKs are superior than SNARKs. They require no trusted setup (!) and they are post-quantum secure (... </summary> </entry> <entry><title>Understanding upgradability</title><link href="https://cairopractice.com/posts/understanding-upgradability/" rel="alternate" type="text/html" title="Understanding upgradability" /><published>2024-04-10T00:00:00+02:00</published> <updated>2024-04-10T00:00:00+02:00</updated> <id>https://cairopractice.com/posts/understanding-upgradability/</id> <content src="https://cairopractice.com/posts/understanding-upgradability/" /> <author> <name>m</name> </author> <summary> Starknet gives us, developers, the power to make our contracts upgradable in a native way. Unlike in the EVM world where one has to fiddle with the inferior proxy pattern, in Starknet we can utilize a single syscall to upgrade the logic of our smart contracts. Let’s take a closer look at the whole mechanism. Contract class &amp;amp; contract instance First thing to be aware of is the distinction... </summary> </entry> <entry><title>Starknet fee reduction</title><link href="https://cairopractice.com/posts/starknet-fee-reduction/" rel="alternate" type="text/html" title="Starknet fee reduction" /><published>2024-03-05T00:00:00+01:00</published> <updated>2024-03-05T00:00:00+01:00</updated> <id>https://cairopractice.com/posts/starknet-fee-reduction/</id> <content src="https://cairopractice.com/posts/starknet-fee-reduction/" /> <author> <name>m</name> </author> <summary> Multiple factors go into calculating transaction fees on Starknet. The biggest one - use of storage - is going to be addressed by 4844 in a couple of days and by additional measures later this year. The second major factor is the number of Cairo steps and builtins used. The heavier the computation a contract does, the more steps and builtins it consumes. A simple ERC20 transfer uses 1613 steps... </summary> </entry> <entry><title>When is get_caller_address zero?</title><link href="https://cairopractice.com/posts/get_caller_address_zero/" rel="alternate" type="text/html" title="When is get_caller_address zero?" /><published>2024-02-29T00:00:00+01:00</published> <updated>2024-02-29T00:00:00+01:00</updated> <id>https://cairopractice.com/posts/get_caller_address_zero/</id> <content src="https://cairopractice.com/posts/get_caller_address_zero/" /> <author> <name>m</name> </author> <summary> It’s very rare for the caller address (as obtained by get_caller_address()) to be zero on Starknet. Let’s examine when can this happen. The obvious case is when calling a view function. The call is not initiated by an account, so the caller is zero. But what about state changing functions? In this case, the caller address is zero when it’s the StarknetOS executing the function. To the best of... </summary> </entry> </feed>
