Skip to content

Commit

Permalink
add update_metadata to functions
Browse files Browse the repository at this point in the history
  • Loading branch information
VictorChepkasov committed Aug 15, 2023
1 parent d2a9847 commit f2c4f3e
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 37 deletions.
2 changes: 1 addition & 1 deletion contracts/promissoryNFT.sol
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ contract PromissoryNFT is ERC721URIStorage {
uint256 _promissoryAmount,
uint256 _dateOfClose
)
public
public
{
Promissory promissory = new Promissory(
tokenCounter+1,
Expand Down
28 changes: 12 additions & 16 deletions scripts/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,6 @@
{
"trait_type": "date of debtor consent",
"value": ""
},
# согласия сторон вполне можно удалить, т.к. без них просто не заминтить токен (лжидается)
{
"trait_type": "holder consent",
"value": ""
},
{
"trait_type": "debtor consent",
"value": ""
}
]
}
Expand All @@ -73,8 +64,8 @@ def create_metadata(_from, token_id):
promissory_info = get_promissory_info(_from, token_id)
print(f'Promissory info: {promissory_info}')
# сохраняем данные контракта в виде атрибутов
for index in range(11):
metadata_template["attributes"][index]["value"] = str(promissory_info[index])
for i in range(9):
metadata_template["attributes"][i]["value"] = str(promissory_info[i])

# имя файла метаданных
metadata_filename = f"./scripts/metadata/tokens/{token_id}.json"
Expand All @@ -98,15 +89,18 @@ def create_metadata(_from, token_id):

# token_id - id токена, метаданные которого будут обновляться
# data - массив, где первый элемент адрес holder, а второй дата закрытия
def update_metadata(token_id, data):
# Если один из элементов data равен None, то данные этогго атрибута не меняются
def update_metadata(_from, token_id):
print(f'Token id: {token_id}')
metadata_filename = f"./scripts/metadata/tokens/{token_id}.json"
print(f'Metadata file: {metadata_filename}')
promissory_info = get_promissory_info(_from, token_id)
# Чтение и запись файла с обновлёнными таданными адреса и даты закрытия векселя
with open(metadata_filename, 'r') as f:
json_file = json.load(f)
with open(metadata_filename, 'w') as metadata_file:
for i in range(len(data)):
json_file["attributes"][i]['value'] = str(data[i])
print(json_file["attributes"][i]['value'])
for i in range(9):
json_file["attributes"][i]['value'] = str(promissory_info[i])
json.dump(json_file, metadata_file, indent=4)

def upload_to_ipfs(data):
Expand Down Expand Up @@ -135,7 +129,9 @@ def get_promissory_info(_from, token_id):
promissory_info = PromissoryNFT[-1].getPromissory(token_id, {
'from': _from
})
promissory_info = Promissory.at(promissory_info).getPromissoryInfo({'from': _from})
promissory_info = Promissory.at(promissory_info).getPromissoryInfo({
'from': _from
})
# чистка promissory info
promissory_info = str(promissory_info).translate(str.maketrans('', '', "()''")).split(', ')
return promissory_info
2 changes: 1 addition & 1 deletion scripts/metadata/metadata_hashes.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
["<https://ipfs.io/ipfs/QmaUGGU9jaBo3mnJ6vKPt7532QTBF7wFxEBhvzi6Q7RSNA>", "<https://ipfs.io/ipfs/QmSLz6vCHSWuvZAEqEUP2d1PGi8dSt7D3rzhsgZsKmy1ip>", "<https://ipfs.io/ipfs/QmQWfL74Uswr6o9C2RmdSNr4Fs4fRZzV4s3U7ztZFdu1Wo>", "<https://ipfs.io/ipfs/QmTURKZhMPzdwg6qwAMhJxYhM9RJS72u6srHsU1x26qrs1>", "<https://ipfs.io/ipfs/QmTXuzQh21wS9MZXgfg2caXKhGTbvyAmrPQL8Ee4bY9rbq>", "<https://ipfs.io/ipfs/QmXTvd7fG8mJCc7RT8yTD9zbzdAivYkmhdz3tr1yUPUopp>"]
["<https://ipfs.io/ipfs/QmaUGGU9jaBo3mnJ6vKPt7532QTBF7wFxEBhvzi6Q7RSNA>", "<https://ipfs.io/ipfs/QmSLz6vCHSWuvZAEqEUP2d1PGi8dSt7D3rzhsgZsKmy1ip>", "<https://ipfs.io/ipfs/QmQWfL74Uswr6o9C2RmdSNr4Fs4fRZzV4s3U7ztZFdu1Wo>", "<https://ipfs.io/ipfs/QmTURKZhMPzdwg6qwAMhJxYhM9RJS72u6srHsU1x26qrs1>", "<https://ipfs.io/ipfs/QmTXuzQh21wS9MZXgfg2caXKhGTbvyAmrPQL8Ee4bY9rbq>", "<https://ipfs.io/ipfs/QmXTvd7fG8mJCc7RT8yTD9zbzdAivYkmhdz3tr1yUPUopp>", "<https://ipfs.io/ipfs/QmRGeJpTzV9bVsDMpFyrtfV1eZ1cjHXzmkXoY3yhbZFKMG>", "<https://ipfs.io/ipfs/QmZSd6dMdf5o1zUdyra2tVjHFrU77r8s4ZRG5GDLVx26Ba>", "<https://ipfs.io/ipfs/QmViJpBVU1NVp55GXteFebd7MvcWaitTWKFA6cgFAtDwen>", "<https://ipfs.io/ipfs/QmfCSCzADrvPEUbqY8TFX6B4tBz2u1RBbS9sBEk2ebg6eP>", "<https://ipfs.io/ipfs/QmW3cnCr8zyVfsMJepT1W1wSdL5jJUz55TiFEEn5zpMQc7>", "<https://ipfs.io/ipfs/QmWJwTmGaE41NBznsBVH9NXMuuF7tuMXkDN4T8bug89fjQ>", "<https://ipfs.io/ipfs/QmdqMcX5bbrvmPKXEcH4gzMy3czuab1xEntkvwp9AzZHKT>", "<https://ipfs.io/ipfs/QmWpcskq6NmQKMs8y9xCd6qxhprhKK5aXbSyrGjABvxNwx>", "<https://ipfs.io/ipfs/QmW8qmwaU6hc57ePh2Qns88qxdFq9Y56cwMzaxUTS7s78H>", "<https://ipfs.io/ipfs/QmQtkqqGR4soZ1BL5Vcx7GqrxmGe4E8vaSAyRCNHuuDAWE>", "<https://ipfs.io/ipfs/QmQHmSV225aHtuDw5aFs62UQGaoyNsJAwsA9BC8z5ZpPy4>", "<https://ipfs.io/ipfs/QmdQAKxnJtoGKcWzFQsvTQSbefvSSBqfz9HYGd6NGRvzHF>", "<https://ipfs.io/ipfs/QmU3xLkWecxcxkkAKhXkJawmFHi4h3vM4ZFUerWNfAN8dS>", "<https://ipfs.io/ipfs/QmUCHC7sAZTPo5Jh9ZnUH2kRJqgRRwv2qkBJbiLagNfQZJ>", "<https://ipfs.io/ipfs/QmQWdwZEyBtKgNDbGp2ANyMMSzdgmjmN41Qobv6EYxRAsM>", "<https://ipfs.io/ipfs/QmenFpWFVxZjZsprFnm7B18UzNnpufdQoUTm7cHxzgH5SQ>", "<https://ipfs.io/ipfs/QmaohA4F9SGri5XYKsQapsW2MgdRykeU5eAbCc9kyWjT73>", "<https://ipfs.io/ipfs/QmRFsk7v56LpcWgJKuWxZkZkDQytKDjzrBN6rWRt7Y5Ghn>", "<https://ipfs.io/ipfs/QmbsycPtbsn6ck6t8cQNmxtnwWj34TNvmuBptfeLpNQaDu>", "<https://ipfs.io/ipfs/QmV7h9xuZN7YJQKd8y4byU5WauKMofFwYTkUzE9og5vMBq>", "<https://ipfs.io/ipfs/QmZpx94Ptp7jemFN4bBQ8GGVsMCWYYpmKXZ1ND8gpe1Sqe>", "<https://ipfs.io/ipfs/QmVSbZHNYekrNxJT3oGh7L2Ymyrtr7LK1TdUU6Dd6Q5RxP>", "<https://ipfs.io/ipfs/Qmd7uaL9mnBwSFj1K1DBQieQLUxMxZTH7abU7ivtVmmw8N>", "<https://ipfs.io/ipfs/QmPEuX4bnBjiUNongUkfdt8e13JYxVrNfuKzpfdcR6nTK9>", "<https://ipfs.io/ipfs/QmdBRQo8MqXBSPvCnZpKwcd3oVmq51E5EF6BvEJMtEKVXq>", "<https://ipfs.io/ipfs/QmS1Yn6zmNMqECzqP8hwaT7MhmydDDvPgDmpy11VeVRnri>", "<https://ipfs.io/ipfs/QmbchH1YTVj1aL6dhDRf1L839457gv4MAfMu9Yt53wRFK2>", "<https://ipfs.io/ipfs/QmbvqrEg5K6WASN4gjcb4oH5wL46cwKpAQRpQ8HTss6JgE>", "<https://ipfs.io/ipfs/Qmee2FNaYZm7nEmZtYQfoPusBhBJU9wNvCPiD1WaUCeovR>", "<https://ipfs.io/ipfs/QmPkFL12cDgwWuz6Ai5xGmKYC3nDjFJE2M6sudeTBqNXh1>", "<https://ipfs.io/ipfs/QmUAhrviuC5UCP2ZN5cu7Xmbrm3Z7kQremUsyUnYW5EEyR>", "<https://ipfs.io/ipfs/QmQNsSjoXQ8iR5V8ZXbU7GoCrUVskFMoFSAtjAEUtpfJ3X>", "<https://ipfs.io/ipfs/QmXLKfpg9nRNQua6AYmKPGtuQ5qy5hu5dZ69AYByJpSWSz>", "<https://ipfs.io/ipfs/QmY83Y2QYLh8GmRjGLseSjAQQmxJotppKQ4xUH67vu85AD>", "<https://ipfs.io/ipfs/QmTVQKsXExwxon5DfFSfbrxZY57NfC6W9UbX6zK16jvwU7>", "<https://ipfs.io/ipfs/QmRy6cpzYLRJWJGtw13P2q7FrYYxwtbNFWqQ8ovE12xFb1>"]
12 changes: 2 additions & 10 deletions scripts/metadata/tokens/1.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"attributes": [
{
"trait_type": "holder address",
"value": "0x6c252dB948Fb85a220c4dEFb3B582F388F1979ED"
"value": "0xF2D669CBe82227dA7086baE8A669711fF020C3e5"
},
{
"trait_type": "debtor address",
Expand All @@ -23,7 +23,7 @@
},
{
"trait_type": "date of registration",
"value": "1692077232"
"value": "1692083718"
},
{
"trait_type": "date of close",
Expand All @@ -36,14 +36,6 @@
{
"trait_type": "date of debtor consent",
"value": "0"
},
{
"trait_type": "holder consent",
"value": "False"
},
{
"trait_type": "debtor consent",
"value": "False"
}
]
}
29 changes: 25 additions & 4 deletions scripts/nft_promissory.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from brownie import PromissoryNFT, Promissory, accounts, config
from scripts.metadata import create_metadata
from brownie import PromissoryNFT, Promissory, accounts, config, chain
from scripts.metadata import create_metadata, update_metadata

def main():
holder = accounts.load('victor')
Expand Down Expand Up @@ -47,6 +47,24 @@ def create_promissory(_from, _debtor, _promissory_commission, _promissory_amount
})
print('Token minted!')

def set_holder_consent(_from, token_id):
promissory = get_promissory(_from, token_id)
promissory.setHolderConsent({
'from':_from,
'priority_fee': '0.2 gwei'
})
update_metadata(_from, token_id)
print('Holder consent saved!')

def set_debtor_consent(_from, token_id):
promissory = get_promissory(_from, token_id)
promissory.setDebtorConsent({
'from':_from,
'priority_fee': '0.2 gwei'
})
update_metadata(_from, token_id)
print('Debtor consent saved!')

# получение разрешения контракту передавать токен
# _from - владелец токена
# _to - лицо, которому даётся возможность управлять токеном
Expand All @@ -61,12 +79,14 @@ def approve(_from, _to, token_id):
# Оплата векселя
# Требование:
# - _from == debtor
def pay_promissory(promissory, _from, token_id):
def pay_promissory(_from, token_id):
promissory = get_promissory(_from, token_id)
promissory.payPromissory({
'from': _from,
'value': '1100 wei',
'priority_fee': '10 wei'
})
update_metadata(_from, token_id)
PromissoryNFT[-1].burnCollectible(token_id, {
'from': _from,
'priority_fee': '10 wei'
Expand Down Expand Up @@ -94,4 +114,5 @@ def transfer_token(owner, to, token_id):
promissory.setNewHolder(to, {
'from': owner,
'priority_fee': '10 wei'
})
})
update_metadata(to, token_id)
1 change: 1 addition & 0 deletions scripts/promissory.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from brownie import Promissory, accounts, config
from dotenv import load_dotenv
from scripts.metadata import update_metadata

load_dotenv()

Expand Down
10 changes: 5 additions & 5 deletions tests/test_nft_promissory.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import pytest
from brownie import PromissoryNFT, chain
from conftest import *
from scripts.promissory import set_debtor_consent, set_holder_consent
from scripts.nft_promissory import (
get_promissory,
create_promissory,
set_holder_consent,
set_debtor_consent,
pay_promissory,
approve,
transfer_token
Expand All @@ -28,11 +29,10 @@ def test_get_promissory_token_info(holder, debtor, promissory_nft):

def test_pay_promissory(holder, debtor, promissory_nft):
create_promissory(holder, debtor, 10, 1000, 1692126000)
set_debtor_consent(debtor)
set_holder_consent(holder)
token_id = PromissoryNFT[-1].tokenCounter()
promissory = get_promissory(debtor, token_id)
exist_token = pay_promissory(promissory, debtor, token_id)
set_holder_consent(holder, token_id)
set_debtor_consent(debtor, token_id)
exist_token = pay_promissory(debtor, token_id)
assert exist_token == False

def test_transfer_token(holder, debtor, third_party, promissory_nft):
Expand Down

0 comments on commit f2c4f3e

Please sign in to comment.