Skip to content

Commit

Permalink
Add StorageController trait to contracts
Browse files Browse the repository at this point in the history
  • Loading branch information
d0rich committed Nov 22, 2023
1 parent 81a2f27 commit 2c48202
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 3 deletions.
3 changes: 2 additions & 1 deletion contracts/contracts/d_social_network_blog.tact
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ import "@stdlib/deploy";
import "./lib/trait_nft_collection.tact";
import "./lib/trait_nft_collection_royalty_extention.tact";
import "./lib/trait_personal_fees.tact";
import "./lib/trait_storage_controller.tact";
import "./messages_d.tact";
import "./d_social_network_post.tact";

contract DSocialNetworkBlog with NftCollection, NftCollectionRoyaltyExtention, PersonalFees {
contract DSocialNetworkBlog with NftCollection, NftCollectionRoyaltyExtention, PersonalFees, StorageController {
blog_id: Int;
next_item_index: Int as uint32 = 0;
owner: Address;
Expand Down
3 changes: 2 additions & 1 deletion contracts/contracts/d_social_network_master.tact
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ import "@stdlib/deploy";
import "@stdlib/ownable";
import "./lib/trait_accounting.tact";
import "./lib/trait_personal_fees.tact";
import "./lib/trait_storage_controller.tact";
import "./messages_d.tact";
import "./d_social_network_blog.tact";

contract DSocialNetworkMaster with Deployable, OwnableTransferable, Accounting, PersonalFees {
contract DSocialNetworkMaster with Deployable, OwnableTransferable, Accounting, PersonalFees, StorageController {
version: String = "v0.0.1-beta";
owner: Address;
personal_fees_destination: Address;
Expand Down
3 changes: 2 additions & 1 deletion contracts/contracts/d_social_network_post.tact
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import "@stdlib/deploy";
import "@stdlib/ownable";
import "./lib/trait_nft_item.tact";
import "./lib/trait_storage_controller.tact";
import "./messages_d.tact";

contract DSocialNetworkPost with NftItem {
contract DSocialNetworkPost with NftItem, StorageController {
collection_address: Address;
item_index: Int;
owner: Address;
Expand Down
46 changes: 46 additions & 0 deletions contracts/contracts/lib/trait_storage_controller.tact
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import "@stdlib/ownable";
import "./trait_accounting";

message Withdraw {
query_id: Int as uint64;
amount: Int;
}

message WithdrawAll {
query_id: Int as uint64;
destroy: Bool?;
}

message TopUp {
query_id: Int as uint64;
}

trait StorageController with Ownable, Accounting {
owner: Address;

receive(msg: TopUp) {}

receive(msg: Withdraw) {
self.requireOwner();
send(SendParameters{
to: self.owner,
value: min(msg.amount, self.calculateSendAmountToHoldEnoughTonForStorage()),
mode: SendIgnoreErrors,
body: "Withdraw".asComment()
});
}

receive(msg: WithdrawAll) {
self.requireOwner();
let additionalMode: Int = 0;
if (msg.destroy == true) {
additionalMode = additionalMode + SendDestroyIfZero;
}
send(SendParameters{
to: self.owner,
value: 0,
mode: SendRemainingBalance + SendIgnoreErrors + additionalMode,
body: "Withdraw all".asComment()
});
}
}

0 comments on commit 2c48202

Please sign in to comment.