Skip to content

Commit 3437090

Browse files
committed
first
1 parent d5f7c27 commit 3437090

File tree

17 files changed

+1314
-0
lines changed

17 files changed

+1314
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[package]
2+
name = "indexer"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
sbor = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "v0.4.1" }
8+
scrypto = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "v0.4.1" }
9+
10+
[dev-dependencies]
11+
radix-engine = { git = "https://github.com/radixdlt/radixdlt-scrypto", tag = "v0.4.1" }
12+
13+
[profile.release]
14+
opt-level = 's' # Optimize for size.
15+
lto = true # Enable Link Time Optimization.
16+
codegen-units = 1 # Reduce number of codegen units to increase optimizations.
17+
panic = 'abort' # Abort on panic.
18+
strip = "debuginfo" # Strip debug info.
19+
20+
[lib]
21+
crate-type = ["cdylib", "lib"]

4-portfolio-management-yield-farming/indexer/README.md

Lines changed: 263 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
use scrypto::prelude::*;
2+
3+
#[derive(NonFungibleData)]
4+
pub struct LoanDue {
5+
pub amount_due: Decimal,
6+
}
7+
8+
blueprint! {
9+
struct FlashLoan {
10+
loan_vault: Vault,
11+
auth_vault: Vault,
12+
transient_resource_address: ResourceAddress,
13+
}
14+
15+
impl FlashLoan {
16+
pub fn new(initial_liquidity: Bucket) -> ComponentAddress {
17+
18+
let auth_token = ResourceBuilder::new_fungible()
19+
.metadata("name", "Flash Loan Auth")
20+
.initial_supply(1);
21+
22+
// Define a "transient" resource which can never be deposited once created.
23+
let address = ResourceBuilder::new_non_fungible()
24+
.metadata(
25+
"name",
26+
"Promise token for BasicFlashLoan - must be returned to be burned!",
27+
)
28+
.mintable(rule!(require(auth_token.resource_address())), LOCKED)
29+
.burnable(rule!(require(auth_token.resource_address())), LOCKED)
30+
.restrict_deposit(rule!(deny_all), LOCKED)
31+
.no_initial_supply();
32+
33+
Self {
34+
loan_vault: Vault::with_bucket(initial_liquidity),
35+
auth_vault: Vault::with_bucket(auth_token),
36+
transient_resource_address: address,
37+
}
38+
.instantiate()
39+
.globalize()
40+
}
41+
42+
pub fn take_loan(&mut self, loan_amount: Decimal) -> (Bucket, Bucket) {
43+
assert!(
44+
loan_amount <= self.loan_vault.amount(),
45+
"Not enough liquidity to supply this loan!"
46+
);
47+
let amount_due = loan_amount * dec!("1.001");
48+
49+
let loan_terms = self.auth_vault.authorize(|| {
50+
borrow_resource_manager!(self.transient_resource_address).mint_non_fungible(
51+
&NonFungibleId::random(),
52+
LoanDue {
53+
amount_due: amount_due,
54+
},
55+
)
56+
});
57+
(self.loan_vault.take(loan_amount), loan_terms)
58+
}
59+
60+
pub fn repay_loan(&mut self, loan_repayment: Bucket, loan_terms: Bucket) {
61+
assert!(
62+
loan_terms.resource_address() == self.transient_resource_address,
63+
"Incorrect resource passed in for loan terms"
64+
);
65+
66+
let terms: LoanDue = loan_terms.non_fungible().data();
67+
assert!(
68+
loan_repayment.amount() >= terms.amount_due,
69+
"Insufficient repayment given for your loan!"
70+
);
71+
72+
self.loan_vault.put(loan_repayment);
73+
self.auth_vault.authorize(|| loan_terms.burn());
74+
}
75+
}
76+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
use scrypto::prelude::*;
2+
3+
blueprint! {
4+
struct IndexPool {
5+
6+
//index pool vault that holds tokens
7+
index_pool:Vault
8+
}
9+
10+
impl IndexPool {
11+
12+
pub fn new(
13+
resource_address:ResourceAddress
14+
) -> ComponentAddress {
15+
let component = Self {
16+
index_pool:Vault::new(resource_address)
17+
}
18+
.instantiate()
19+
.globalize();
20+
return component;
21+
}
22+
23+
//Deposit tokens into index pool vault
24+
pub fn deposit(&mut self, tokens:Bucket){
25+
self.index_pool.put(tokens);
26+
}
27+
28+
//Get blance of index pool vault
29+
pub fn balance(&self) -> Decimal {
30+
return self.index_pool.amount();
31+
}
32+
33+
//Withdraws tokens from index pool vault
34+
pub fn withdraw(&mut self, amount:Decimal) -> Bucket {
35+
return self.index_pool.take(amount);
36+
}
37+
38+
pub fn take_all(&mut self) -> Bucket {
39+
return self.index_pool.take_all();
40+
}
41+
42+
}
43+
}

0 commit comments

Comments
 (0)