Техническое руководство по созданию предложения о расходовании средств, находящихся в казне сообщест
Пошаговое техническое руководство по созданию предложения о переводе ethDYDX из казны сообщества на адрес назначения.
Пользователь Reverie подготовил исчерпывающее техническое руководство по представлению предложения по управлению для перевода $ethDYDX из кассы сообщества с помощью запроса на внесение изменений в хранилище контрактов на управление dYdX.
Чтобы создать это предложение, член сообщества dYdX должен иметь не менее 5 млн токенов управления (0,5% от общего доступного количества токенов). Это пороговое значение для внесения предложений с целью голосования с короткой блокировкой по времени.
Предварительные требования
Перед подачей запроса на внесение изменений необходимо сделать следующее:
Жизненный цикл предложения. Нужно опубликовать ЗК согласно шаблону предложения, а члены сообщества должны проголосовать за предложение на Snapshot.
Адрес назначения. Необходимо заранее создать адрес назначения. Если адрес назначения требует мультиподписи, нужно создать кошелек с мультиподписью.
Счет GitHub. Необходим счет GitHub для создания форка хранилища.
Количество переводимых средств (необязательно). Желательно установить переводимое количество средств до отправки запроса на внесение изменений. Однако если это значение условное, то количество средств можно установить прямо перед утверждением.
Хэш IPFS ППУ (необязательно). Если известно количество переводимых средств, то ППУ необходимо оформить и отправить в IPFS для генерации хэша. Однако если количество средств еще не определено, это можно сделать прямо перед утверждением.
Создание предложения
Создайте форк репозитория governance-contracts dYdX в своем аккаунте GitHub.

2. Клонируйте хранилище и укажите ваше имя пользователя вместо [username].
git clone https://github.com/[username]/governance-contracts.git3. Переменные конфигурации
Добавьте две новые переменные в константу configSchema в файле src/config/index.ts. Они будут использоваться для тестирования. В следующих блоках кода измените поля PROPOSAL_NAME и PROPOSAL на название отправляемого предложения.
Добавьте адрес назначения и количество переводимых средств в качестве новых переменных в константу config в файле src/deploy-config/base-config.ts.
Примечание. Согласно стандарту ERC-20 количество переводимых средств нужно умножить на 10^18. Если количество средств еще неизвестно, можно указать временное значение (например, 10 → 10000000000000000000).
Добавьте переменную хэша IPFS, которая будет ссылаться на ППУ в другом репозитории, в файл src/lib/constants.ts:
Примечание. Если ППУ еще не было опубликовано, для тестирования можно указать временное значение (например, ‘0x0000000000000000000000000000000000000000000000000000000000000000’)\
4. Код предложения
Создайте новый файл с названием предложения (proposal-name.ts) в файле src/migrations, а затем внесите в него следующий код:
а) Добавьте функции импорта в верхней части файла:
б) Создайте новую функцию, используя название предложения, ниже функций импорта и добавьте следующий код с двумя уникальными переменными:
destinationAddress — это адрес, который получит переводимые средства.
deployConfig.PROPOSAL_FUNDING_AMOUNT — это созданная ранее переменная, которая определит количество переводимых средств.
5. Развертывание
Создав предложение, мы можем написать код развертывания, который будет генерировать транзакцию и данные вызова, необходимые для отправки предложения.
В разделе tasks/deployment создайте новый файл с тем же названием, что использовалось для кода предложения (proposal-name.ts), и внесите в него следующий код:
а) Добавьте необходимые функции импорта со следующими переменными:
DIP_NUMBER_IPFS_HASH — это переменная, которую мы добавляем в раздел lib/constants.
createProposalNameProposal — это функция, которую мы создали в разделе /src/migrations/proposal-name.
б) Создайте задачу hardhat и внесите информацию о предложении в ее первую строку. Укажите название предложения вместо proposal-name в ‘deploy:proposal-name:’, а затем введите краткое описание в ‘Proposal Description’.
Последняя строка вызывает функцию, которую вы импортировали из кода предложения, поэтому ее нужно будет скорректировать.
6. Создание тестов
Теперь, когда код готов к развертыванию, пришло время создать несколько тестов для предложения. Тестирование проводится как локально, так и с помощью форка мейннета для моделирования выполнения предложения в цепочке.
а) Добавьте тесты предложения
Снова добавьте новый файл с названием предложения в раздел test/migrations и внесите в него следующий код:
Добавьте необходимые функции импорта, включая функции предложения:
createProposalNameProposal — это функция, которую мы создали в разделе /src/migrations/proposal-name. \
MOCK_PROPOSAL_IPFS_HASH — это имитация хэша для тестирования.
Добавьте функции тестирования, сделав следующее:
fundProposalNameViaProposal — создайте эту функцию и переименуйте ее, чтобы ее название совпадало с названием предложения.
destinationAddress — измените этот параметр, чтобы он совпадал с названием назначения.
deployConfig.PROPOSAL_FUNDING_AMOUNT — этот параметр будет заменен переменной из файла base-config.
FUND_PROPOSAL_NAME_PROPOSAL_ID — это переменная, которую мы создали в файле config/index.ts.
createProposalNameProposal — импортируйте эту функцию выше для использования.
fundProposalNameViaNoProposal — создайте эту функцию и переименуйте ее, чтобы ее название совпадало с названием предложения.
Выполните приведенный ниже код, чтобы заменить все эти переменные и существующие переменные, уже созданные выше, на название предложения:
б) Добавьте функции тестирования в тестовый сценарий
В файл test/migrations/deploy-contracts-for-test.ts мы добавим функции, созданные выше, чтобы включить их в наши тесты:
Импортируйте созданные функции
Добавьте тесты для обеих функций, создав общую функцию тестирования executeProposalNameProposalForTest. Переименуйте ее так, чтобы ее название совпадало с названием предложения.
Мы также вызываем ранее созданную переменную конфигурации TEST_PROPOSAL_NAME_TRUST_WITH_PROPOSAL и PROPOSAL_NAME_ADDRESS из deployConfig.
в) Добавьте контракт для тестирования
Добавьте функцию, созданную выше, в файл test/helpers/get-deployed-contracts-for-test.ts, чтобы тесты запускались в рамках тестирования форка мейннета:
Импортируйте функцию executeProposalNameProposalForTest из файла переноса:
Добавьте эту функцию в getDeployedContractsForTest() вне последнего цикла else:
г) Окончательный тестовый файл
Наконец, мы добавляем проверку хэша IPFS и баланса мультиподписи после имитации предложения, чтобы убедиться, что все завершится так, как ожидалось.
Добавьте новый файл proposal-name-proposal.spec.ts с названием предложения в раздел test/misc, а затем включите в него следующие два теста:
Мы импортируем хэш IPFS из lib с помощью DIP_NUMBER_IPFS_HASH.
Мы жестко кодируем следующий номер proposalId с помощью ProposalNameId.
Мы проверяем хэш предложения с помощью константы Hash.
Мы проверяем PROPOSAL_NAME_ADDRESS на предмет наличия ожидаемого баланса PROPOSAL_FUNDING_AMOUNT.
Примечание. Если у этого адреса уже есть DYDX, вам потребуется жестко закодировать баланс для завершения теста.
7. Отправка запроса на внесение изменений
После внесения всех изменений в код и их локального сохранения мы можем зафиксировать форк репозитория и отправить запрос на внесение изменений в репозиторий dYdX для рассмотрения:
а) Зафиксируйте изменения с помощью командной строки.
б) Отправьте запрос на внесение изменений в репозиторий dYdX.

в) Дождитесь рассмотрения и одобрения со стороны менеджера репозитория.
Last updated
Was this helpful?