diff --git a/basics/create-account/README.md b/basics/create-account/README.md index d1b260d24..9ef39a852 100644 --- a/basics/create-account/README.md +++ b/basics/create-account/README.md @@ -3,7 +3,7 @@ :wrench: We're going to create a Solana account. :wrench: This account is going to be a **system account** - meaning it will be owned by the System Program. In short, this means only the System Program will be allowed to modify it's data. - + In this example, this account will simply hold some SOL. ### Links: diff --git a/basics/cross-program-invocation/README.md b/basics/cross-program-invocation/README.md index e4b059d34..0721147a6 100644 --- a/basics/cross-program-invocation/README.md +++ b/basics/cross-program-invocation/README.md @@ -20,17 +20,19 @@ Let's say we decided it was essential to have our mint (operation 1) and our "mi With the `native` implementation, you have to do a little bit of lifting to import one crate into another within your Cargo workspace. -Add the `no-entrypoint` feature to Cargo.toml: +This is because a Solana Program needs to have a single entry point. This means a Solana Program that depends on +other Solana Programs needs a way to disable the other entry points. This is done using `[features]` in Cargo. + +Add the `no-entrypoint` feature to Cargo.toml of the `lever` crate: ```toml [features] no-entrypoint = [] -cpi = ["no-entrypoint"] ``` -Then use the import just like we did in the `anchor` example: +Then, in the `hand` crate, use the import just like we did in the `anchor` example: ```toml [dependencies] ... -lever = { path = "../lever", features = [ "cpi" ] } +lever = { path = "../lever", features = [ "no-entrypoint" ] } ``` Lastly, add this annotation over the `entrypoint!` macro that you wish to disable on import (the child program): ```rust @@ -38,6 +40,15 @@ Lastly, add this annotation over the `entrypoint!` macro that you wish to disabl entrypoint!(process_instruction); ``` +The above configuration defines `no-entrypoint` as a _feature_ in the `lever` crate. This controls whether the line +`entrypoint!(process_instruction)` gets compiled or not depending on how the `lever` crate is included as a dependency. + +When adding `lever` as a dependency in the Cargo.tml of `hand` crate, we configure it with `features = [ "no-entrypoint" ]` +this makes sure that the `entrypoint!(process_instruction)` line is not part of the compilation. This ensures that only +the `entrypoint!(process_instruction)` from the `hand` crate is part of the compilation. + +For more about how `[features]` see [Features chapter in the Rust Book](https://doc.rust-lang.org/cargo/reference/features.html) + ### Let's switch the power on and off using a CPI! lever diff --git a/basics/cross-program-invocation/native/programs/hand/Cargo.toml b/basics/cross-program-invocation/native/programs/hand/Cargo.toml index 6b8dc1296..27b5aa4da 100644 --- a/basics/cross-program-invocation/native/programs/hand/Cargo.toml +++ b/basics/cross-program-invocation/native/programs/hand/Cargo.toml @@ -3,10 +3,6 @@ name = "hand" version = "0.1.0" edition = "2021" -[features] -no-entrypoint = [] -cpi = ["no-entrypoint"] - [dependencies] borsh = "0.9.3" borsh-derive = "0.9.1"